vscode-powershell icon indicating copy to clipboard operation
vscode-powershell copied to clipboard

[ScriptAnalyzer Issue] Unexpected string with powershell.codeFormatting.whitespaceBetweenParameters enabled

Open DarkLite1 opened this issue 9 months ago • 4 comments

Prerequisites

  • [x] I have written a descriptive issue title.
  • [x] I have searched all open and closed issues to ensure it has not already been reported.
  • [x] I have read the troubleshooting guide.
  • [x] I am sure this issue is with the extension itself and does not reproduce in a standalone PowerShell instance.
  • [x] I have verified that I am using the latest version of Visual Studio Code and the PowerShell extension.
  • [x] If this is a security issue, I have read the security issue reporting guidance.

Summary

When I enable the setting "powershell.codeFormatting.whitespaceBetweenParameters", a part of my code is deleted and replaced with the string "Co".

PowerShell Version

Name                           Value
----                           -----
PSVersion                      7.4.6
PSEdition                      Core
GitCommitId                    7.4.6
OS                             Microsoft Windows 10.0.20348
Platform                       Win32NT
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0…}
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
WSManStackVersion              3.0

Name             : Visual Studio Code Host
Version          : 2025.0.0
InstanceId       : 322bff36-44ec-4947-8657-cb94383fe5d6
UI               : System.Management.Automation.Internal.Host.InternalHostUserInterface
CurrentCulture   : en-US
CurrentUICulture : en-US
PrivateData      : Microsoft.PowerShell.ConsoleHost+ConsoleColorProxy
DebuggerEnabled  : True
IsRunspacePushed : False
Runspace         : System.Management.Automation.Runspaces.LocalRunspace

Visual Studio Code Version

1.96.4
cd4ee3b1c348a13bafd8f9ad8060705f6d4b9cba
x64

Extension Version

[email protected]

Steps to Reproduce

Enable the setting "powershell.codeFormatting.whitespaceBetweenParameters":

workspace.json

{
	"folders": [
		{ "path": "T:/Test/PowerShell" },
		{ "path": "C:/Program Files/PowerShell/Modules" }
	],
	"settings": {
		"powershell.cwd": "PowerShell",
		"editor.wordWrap": "wordWrapColumn",
		"powershell.codeFormatting.autoCorrectAliases": true,
		"powershell.codeFormatting.avoidSemicolonsAsLineTerminators": true,
		"powershell.codeFormatting.pipelineIndentationStyle": "IncreaseIndentationForFirstPipeline",
		"powershell.codeFormatting.trimWhitespaceAroundPipe": true,
		"powershell.codeFormatting.useConstantStrings": true,
		"powershell.codeFormatting.useCorrectCasing": true,
		"powershell.codeFormatting.whitespaceBetweenParameters": true # ENABLE TO SEE IT
	}
}

Testie.ps1

Describe 'describe something' {
    Context 'do something in context' {
        It 'to the test' {
            # test something
        }
    }  -Tag test # double space before '-Tag'
}

Now press "SHIFT + ALT + F" and see the new broken code:

Describe 'describe something' {
    Co-Tag test # double space before '-Tag'
}

When the setting "powershell.codeFormatting.whitespaceBetweenParameters" is false, the issue isn't happening.

Visuals

From:

Image

To:

Image

Logs

No response

DarkLite1 avatar Feb 19 '25 13:02 DarkLite1

Thanks for your submission!

This is a ScriptAnalyzer issue. Please file an issue there with this reproduction, and report back if it gets fixed there.

I'll leave this issue open but marked as Pending: External as there's nothing we can do to fix it here.

Invoke-ScriptAnalyzer -Fix -Path path/to/test.ps1 -Settings @{
❯     Rules = @{
❯         PSUseConsistentWhitespace = @{
❯             Enable                                  = $true
❯             CheckInnerBrace                         = $true
❯             CheckOpenBrace                          = $true
❯             CheckOpenParen                          = $true
❯             CheckOperator                           = $true
❯             CheckPipe                               = $true
❯             CheckPipeForRedundantWhitespace         = $false
❯             CheckSeparator                          = $true
❯             CheckParameter                          = $true
❯             IgnoreAssignmentOperatorInsideHashTable = $false
❯         }
❯     }
❯ }

JustinGrote avatar Feb 19 '25 23:02 JustinGrote

Fixed by the PSScriptAnalyzer team

DarkLite1 avatar Feb 25 '25 07:02 DarkLite1

Great! I'm actually going to leave this open until the newest version gets bundled into the extension. Assigning @andyleejordan to coordinate.

JustinGrote avatar Feb 25 '25 15:02 JustinGrote

Hopefully doing a preview of PSScriptAnalyzer within the month, to bundle into a preview of the extension!

andyleejordan avatar Feb 25 '25 19:02 andyleejordan