Repository navigation
PSUseConsistentWhitespace - False validation in switch statements #1319
Copy link
Copy link
Open
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
- 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 }
}
- 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 $settingsExpected 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.1Reactions are currently unavailable
Activity
msftrncs commentedon Aug 24, 2019
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 commentedon 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)

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 commentedon Sep 2, 2019
Sorry for the late response. When running
Invoke-Formatteragainst without settings one can see that there are alsoUseConsistentIndentationwarnings being emitted and it seems that the reason why running the formatter on it does not change anything is becauseUseConsistentWhiteSpacecancels out the correction of theUseConsistentIndentationrule...Therefore a fix in the rule itself would also require a fix in the other rule to keep the
Formattergenerally working when using the default settings.Formatting Bug workaround:
Bug fix 2020 04 (#114)