question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Extension's Formatter ignores config file.

See original GitHub issue

Issue Description

The extension’s formatter is ignoring the config file: PSScriptAnalyzerSettings.psd1 I didn’t file this in /PSScriptAnalyzer because it (Invoke-Formatter) works as expected with the same config file.

Properties set under "powershell.codeFormatting.* are working. Except it’s ignoring "powershell.scriptAnalysis.settingsPath": "PSScriptAnalyzerSettings.psd1" when formatting.

I can disable changing process using Invoke-Formatter using this config

@{
    'Rules' = @{
        'PSAvoidUsingCmdletAliases' = @{
            'Whitelist' = @('process')
        }
    }
}

Expected Behaviour

Input example:

function foo {
    param ()

    Process {
        ls
        process
    }
}

Should format as

function foo {
    param ()

    Process {
        Get-ChildItem
        process
    }
}

Actual Behaviour

function foo {
    param ()

    Process {
        Get-ChildItem
        Get-Process
    }
}

System Details

A tiny workspace reproduces the example: 2020-10-20 - Invoke-Formatter - ignores config.zip

System Details Output (Click to Expand)
### VSCode version: 1.50.1 d2e414d9e4239a252d1ab117bd7067f125afd80a x64

### VSCode extensions:
alefragnani.Bookmarks@11.4.0
arcticicestudio.nord-visual-studio-code@0.14.0
bungcip.better-toml@0.3.2
christian-kohler.path-intellisense@2.3.0
CoenraadS.bracket-pair-colorizer@1.0.61
CoenraadS.bracket-pair-colorizer-2@0.2.0
DavidAnson.vscode-markdownlint@0.37.1
donjayamanne.githistory@0.6.12
DotJoshJohnson.xml@2.5.1
eamodio.gitlens@10.2.2
eamodio.tsl-problem-matcher@0.3.1
Equinusocio.vsc-community-material-theme@1.4.2
Equinusocio.vsc-material-theme@33.0.0
equinusocio.vsc-material-theme-icons@1.2.0
esbenp.prettier-vscode@5.7.1
evan-buss.font-switcher@3.1.0
firefox-devtools.vscode-firefox-debug@2.9.1
formulahendry.code-runner@0.11.1
juanmnl.vscode-theme-hydra@3.1.0
matangover.mypy@0.1.4
mechatroner.rainbow-csv@1.7.1
medo64.code-point@1.7.1
ms-dotnettools.csharp@1.23.4
ms-mssql.mssql@1.9.0
ms-python.python@2020.9.114305
ms-python.vscode-pylance@2020.10.2
ms-vscode-remote.remote-wsl@0.50.1
ms-vscode.cpptools@1.0.1
ms-vscode.hexeditor@1.3.0
ms-vscode.powershell@2020.6.0  [disabled]
ms-vscode.powershell-preview@2020.9.0 
ms-vscode.vscode-typescript-tslint-plugin@1.2.3
msjsdiag.debugger-for-chrome@4.12.11
octref.vscode-json-transform@0.1.2
PKief.material-icon-theme@4.3.0
PowerQuery.vscode-powerquery@0.1.5
RandomFractalsInc.vscode-data-preview@2.2.0
redhat.vscode-xml@0.13.0
RobbOwen.synthwave-vscode@0.1.8
rogalmic.bash-debug@0.3.9
rust-lang.rust@0.7.8
sallar.vscode-duotone-dark@0.3.3
shakram02.bash-beautify@0.1.1
shd101wyy.markdown-preview-enhanced@0.5.13
stansw.vscode-odata@0.1.0
stuart.unique-window-colors@1.0.51
vadimcn.vscode-lldb@1.6.0
VisualStudioExptTeam.vscodeintellicode@1.2.10
webfreak.debug@0.25.0
wwm.better-align@1.1.6
yzhang.markdown-all-in-one@3.3.0
zhuangtongfa.material-theme@3.9.3

### PSES version: 2.3.0.0

Name                              Version
----                              -------
PowerShellEditorServices.Commands 0.2.0
PowerShellEditorServices.VSCode   0.2.0

### PowerShell version:

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

Attached Logs

log - editorServices.log

Environment Information

Visual Studio Code

Name Version
Operating System Windows_NT x64 10.0.19041
VSCode 1.50.1
PowerShell Extension Version 2020.9.0

PowerShell Information

Name Value
PSVersion 7.0.3
PSEdition Core
GitCommitId 7.0.3
OS Microsoft Windows 10.0.19041
Platform Win32NT
PSCompatibleVersions 1.0 2.0 3.0 4.0 5.0 5.1.10032.0 6.0.0 6.1.0 6.2.0 7.0.3
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0

Visual Studio Code Extensions

Visual Studio Code Extensions(Click to Expand)
Extension Author Version
better-toml bungcip 0.3.2
Bookmarks alefragnani 11.4.0
code-point medo64 1.7.1
code-runner formulahendry 0.11.1
cpptools ms-vscode 1.0.1
csharp ms-dotnettools 1.23.4
debug webfreak 0.25.0
debugger-for-chrome msjsdiag 4.12.11
font-switcher evan-buss 3.1.0
githistory donjayamanne 0.6.12
gitlens eamodio 10.2.2
hexeditor ms-vscode 1.3.0
markdown-all-in-one yzhang 3.3.0
material-icon-theme PKief 4.3.0
material-theme zhuangtongfa 3.9.3
mssql ms-mssql 1.9.0
mypy matangover 0.1.4
nord-visual-studio-code arcticicestudio 0.14.0
path-intellisense christian-kohler 2.3.0
powershell-preview ms-vscode 2020.9.0
prettier-vscode esbenp 5.7.1
python ms-python 2020.9.114305
rainbow-csv mechatroner 1.7.1
remote-wsl ms-vscode-remote 0.50.1
rust rust-lang 0.7.8
synthwave-vscode RobbOwen 0.1.8
tsl-problem-matcher eamodio 0.3.1
vsc-community-material-theme Equinusocio 1.4.2
vsc-material-theme Equinusocio 33.0.0
vsc-material-theme-icons equinusocio 1.2.0
vscode-data-preview RandomFractalsInc 2.2.0
vscode-duotone-dark sallar 0.3.3
vscode-firefox-debug firefox-devtools 2.9.1
vscode-json-transform octref 0.1.2
vscode-lldb vadimcn 1.6.0
vscode-odata stansw 0.1.0
vscode-powerquery PowerQuery 0.1.5
vscode-pylance ms-python 2020.10.2
vscode-theme-hydra juanmnl 3.1.0
vscode-typescript-tslint-plugin ms-vscode 1.2.3
vscode-xml redhat 0.13.0
vscodeintellicode VisualStudioExptTeam 1.2.10
manual_invoke_formatter.ps1 (Click to Expand)
$settings = 'PSScriptAnalyzerSettings.psd1'
$src = @'
function foo {
    param ()

    Process {
        ls
        process
    }
}
'@

$expected = @'
function foo {
    param ()

    Process {
        Get-ChildItem
        process
    }
}
'@

Write-Host -fore red "Input"
$src

Write-Host -fore red "Result"
$result = Invoke-Formatter -ScriptDefinition $src -Settings $settings
$result

"Expected?"
$result -eq $expected

Issue Analytics

  • State:open
  • Created 3 years ago
  • Reactions:1
  • Comments:5 (1 by maintainers)

github_iconTop GitHub Comments

1reaction
ninmonkeycommented, Apr 18, 2021

@corbob:

All formatting related rule properties are settable via the powershell.codeformatting.* settings

My original examples weren’t great. This new one shows that

  • there’s a formatting setting that the extension doesn’t support
  • this involes a real error unlike the original – which is technically correct behavior, because that’s still parsable

I cannot find a powershell.formatting setting that lets me change the formatting setting PSAvoidUsingCmdletAliases

Problem

Formatter breaks code when there’s parse errors.

Invoke-Formatter runs even on parse errors. Because of that, it’s indirectly mutating code. After fixing the error (like a missing comma), you also have to fix the (now missing) process block

vscode - formatter - ignores config - part 2 - 2021-04-15

Proposed Solution

  • If ParseErrors are found, don’t run Invoke-Formatter , otherwise
  • allow whitelisting process for the rule PSAvoidUsingCmdletAliases

( I filed this under vscode-powershell because it’s invoking the formatter with its own config)

How to Reproduce

PSScriptAnalyzerSettings.psd1

@{
    'Rules' = @{
        # keep the rule *except* 'process' because tiny typo-s mutates code
        'PSAvoidUsingCmdletAliases' = @{
            Enable      = $True
            'Whitelist' = @('process')
        }
    }
}

To Reproduce

Case1: Error Case

function DoStuff {
    <#
    .description
        example trigger type 1

        A few cases the script becomes synatically invalid
        Like accidentally deleting a ',' in the parameter block

        The formatter should not modify the script when  **error severity level** errors are found

        As a work-around I whitelisted 'process', so I could keep the rule on
    #>
    param(
        [Parameter()][int]$Num
        [Parameter()][int]$Num2
    )
    process {
    }
}

Case2: Unexpected, but correct behavior.

function OtherStuff {
    <#
    .description
    example trigger type 2

    By accident, there exists code outside the process/begin/end blocks

    The code is technically synatically valid. The User doesn't expect doesn't expect `process` ( or `get-process` ) to be called with a script block.

    Meaning it's formatting using the correct behavior.
    #>
    'accidental outer code'
    process {

    }
}
1reaction
corbobcommented, Oct 26, 2020

It looks like @bergmeister may have answered this in the #vscode channel on Discord/Slack Reproduced here to provide context within the issue: @ninmonkey The settings path settings only applies for script analysis, i.e. Invoke-ScriptAnalyzer and not formatting. All formatting related rule properties are settable via the powershell.codeformatting.* settings

I’ll add: if you’re looking for project specific formatting options, you might want to use a workspace settings file .vscode/settings.json so that anyone pulling down the code gets your formatting options.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Prettier vscode extension ignoring config files
It seems that the VSCode prettier extension uses the config file in the VSCode settings over the local one, even if that config...
Read more >
Configuration File
Overrides let you have different configuration for certain file extensions, folders and specific files. Prettier borrows ESLint's override format. JSON:
Read more >
How to configure Prettier and VSCode
Open .vscode/settings.json file and confirm: VSCode Prettier extension is configured as the default formatter. Formatting on save is enabled.
Read more >
Configuration
The .stylelintrc file (without extension) can be in JSON or YAML format. You can add a filename extension to help your text editor...
Read more >
Clang-Format Style Options — Clang 16.0.0git documentation
When formatting standard input or a file that doesn't have the extension corresponding to its ... clang-format -style=llvm -dump-config > .clang-format.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found