Skip to content

PSUseConsistentWhitespace - False validation in switch statements #1319

Description

Before submitting a bug report:

  • Make sure you are able to repro it on the latest released version
  • Perform a quick search for existing issues to check if this bug has already been reported

Steps to reproduce

  1. Create script with following contents:
$TargetLogSize = 64
switch ($TargetLogSize) {
    { $_ -le 64 } { 64 }
    { $_ -ge 64 -and $_ -lt 256 } { 256 }
    { $_ -ge 256 -and $_ -lt 1024 } { 512 }
    { $_ -ge 1024 -and $_ -lt 4096 } { 1024 }
    { $_ -ge 4096 -and $_ -lt 8192 } { 2048 }
    { $_ -ge 8192 -and $_ -lt 16384 } { 4096 }
    { $_ -ge 16384 } { 8192 }
}
  1. Execute following settings:
$settings = @{
    IncludeRules = @(
        'PSUseConsistentWhitespace',
    )
    Rules        = @{
        PSUseConsistentWhitespace  = @{
            Enable          = $true
            CheckInnerBrace = $true
            CheckOpenBrace  = $true
            CheckOpenParen  = $true
            CheckOperator   = $false
            CheckPipe       = $true
            CheckSeparator  = $true
        }
    }
}
Invoke-ScriptAnalyzer -Path C:\temp\test.script.ps1 -Severity Warning -Settings $settings

Expected behavior

No warnings to be returned

Actual behavior

Receive warnings on space before an open brace.


RuleName                            Severity     ScriptName Line  Message                                                     
--------                            --------     ---------- ----  -------                                                     
PSUseConsistentWhitespace           Warning      test.scrip 4     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 5     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 6     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 7     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 8     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 9     Use space before open brace.                                
                                                 t.ps1                                                                        
PSUseConsistentWhitespace           Warning      test.scrip 10    Use space before open brace.                                
                                                 t.ps1                                                                        



Environment data

> $PSVersionTable

Name                           Value                                                                                                                                
----                           -----                                                                                                                                
PSVersion                      5.1.18362.145                                                                                                                        
PSEdition                      Desktop                                                                                                                              
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}                                                                                                              
BuildVersion                   10.0.18362.145                                                                                                                       
CLRVersion                     4.0.30319.42000                                                                                                                      
WSManStackVersion              3.0                                                                                                                                  
PSRemotingProtocolVersion      2.3                                                                                                                                  
SerializationVersion           1.1.0.1                                                                                                                              

> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.18.1
1.18.0
1.17.1

Activity

  1. msftrncs commented on Aug 24, 2019

    @msftrncs

    See #1298, sounds the same.

    You might want to edit the area between your example and the settings … the ``` failed to be on their own line.

  2. msftrncs commented on Aug 24, 2019

    @msftrncs

    If you place the scriptblock conditions each in a parenthesis it changes the behavior :)

    If you see the statement in the PSES configuration for the rule in VS Code: (oops, wrong snip the first time)
    image
    It implies that the feature is meant only for use after a keyword, but its not how its currently working. Instead it seems to be upset that there isn't a keyword in front of it, so its not considering the space.

    Issue #1168, its discussed how this rule affects formatting of the .where({ }) or .foreach({ }) scriptblock syntaxes as well.

  3. bergmeister commented on Sep 2, 2019

    @bergmeister
    Collaborator

    Sorry for the late response. When running Invoke-Formatter against without settings one can see that there are also UseConsistentIndentation warnings being emitted and it seems that the reason why running the formatter on it does not change anything is because UseConsistentWhiteSpace cancels out the correction of the UseConsistentIndentation rule...
    Therefore a fix in the rule itself would also require a fix in the other rule to keep the Formatter generally working when using the default settings.

  4. added a commit that references this issue on Apr 6, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions