Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PSUseConsistentWhitespace - False validation in switch statements #1319

Open
2 tasks done
wsmelton opened this issue Aug 22, 2019 · 3 comments
Open
2 tasks done

PSUseConsistentWhitespace - False validation in switch statements #1319

wsmelton opened this issue Aug 22, 2019 · 3 comments

Comments

@wsmelton
Copy link

wsmelton commented Aug 22, 2019

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
@msftrncs
Copy link

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.

@msftrncs
Copy link

msftrncs commented Aug 24, 2019

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.

@bergmeister
Copy link
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.

Nillth added a commit to ahaydon/Qlik-Cli-Windows that referenced this issue Apr 3, 2020
ahaydon pushed a commit to ahaydon/Qlik-Cli-Windows that referenced this issue Apr 6, 2020
* BugFix
WebSession now assigned to Script Scope
Fixed formatting

* Changes:
Added additional help for Connect-Qlik Parameters
Added Type Check for TrustAllCertsPolicy to prevent trying to re-add

* BugFix
...Hashtable] does not contain a method named 'ForEach'.

* Formatting:
Fixed to align with ScriptAnalyzer requirements

* BugFix
Handle Null -eq Attributes correctly

* Various:
Added pipline support
Added Architecture
Added LogOn

* Formatting

* Formatting Bug workaround:
PowerShell/PSScriptAnalyzer#1319
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants