Skip to content

Unexpected string with powershell.codeFormatting.whitespaceBetweenParameters enabled #2060

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

Closed
DarkLite1 opened this issue Feb 20, 2025 · 1 comment · Fixed by #2064
Closed

Comments

@DarkLite1
Copy link

Summary

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

(Reported it here too, but this seems to be the right place..)

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

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

@liamjpeters
Copy link
Contributor

I believe this is because of the correction extents used:

var expectedStartColumnNumberOfRightExtent = leftExtent.EndColumnNumber + 1;
if (rightExtent.StartColumnNumber > expectedStartColumnNumberOfRightExtent)
{
int numberOfRedundantWhiteSpaces = rightExtent.StartColumnNumber - expectedStartColumnNumberOfRightExtent;
var correction = new CorrectionExtent(
startLineNumber: leftExtent.StartLineNumber,
endLineNumber: leftExtent.EndLineNumber,
startColumnNumber: leftExtent.EndColumnNumber + 1,
endColumnNumber: leftExtent.EndColumnNumber + 1 + numberOfRedundantWhiteSpaces,
text: string.Empty,
file: leftExtent.File);

The erroneous whitespace is between the two extents, so removal needs to happen from the last line of the left extent to the first line of the right extent.

I believe I've covered it off with the PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants