PowerShell / PowerShell/PSScriptAnalyzer

Formatting misses certain keywords (unary operators, 'until')

Aberta
#2,095 4 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Area - Formatter Issue - Enhancement Up for Grabs
Linguagem predominante
C#
Estrelas
2.2k
Forks
415
Merge médio
13h 1min
PRs com merge (30d)
2

Descrição

I found that during formatting, some keywords aren't separated from leading braces (while), and some are seemingly ignored entirely (until). Also, unary operators (-not, -bnot, etc.) aren't separated with whitespace the same way as binary operators (-eq, -like, etc.).

Steps to reproduce

  1. Paste the following into a script
  2. Use Invoke-Formatter or the PowerShell VSCode extension to format the document
if(-not$false) {
    do{
        "Hello!"
    }until(
        $True
    )
    do{
        "Oh, hi!"
    }while(
        -not$True
    )
    while(-not$True) {
        "This won't show up."
    }
}

Expected behavior

Roughly the following output. Some is dependent on brace style (OTBS in this case), but all rules for inserting whitespace around keywords and operators should be enabled.

if (-not $false) {
    do {
        'Hello!'
    } until (
        $True
    )
    do {
        'Oh, hi!'
    } while (
        -not $True
    )
    while (-not $True) {
        "This won't show up."
    }
}

Actual behavior

if (-not$false) { # -not isn't separated by whitespace
    do {
        'Hello!'
    }until( # no whitespace around Until
        $True
    )
    do {
        'Oh, hi!'
    }while ( # only trailing whitespace for While
        -not$True # no separation
    )
    while (-not$True) { # no separation for -not and -bnot
        "This won't show up."
    }
}

Environment data

> $PSVersionTable
Name                           Value
----                           -----
PSVersion                      5.1.19041.5737
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.5737
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.23.0

1.23.0 is the version included with the current (2025.0.0) VSCode PowerShell extension. I've also installed and tested 1.24.0 with the same results.

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece executando o reproducer fornecido por meio do Invoke-Formatter e compare o resultado com a saída esperada. Rastreie como o formatter lida com os espaços das palavras-chave while e until e, em seguida, com operadores unários como -not e -bnot. O trabalho estará concluído quando a saída formatada separar essas palavras-chave e operadores conforme mostrado nos casos relatados.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
csharp, powershell
Domínio
tooling
Tipo de issue
Bug
Dificuldade
3/5
Tempo estimado
1-2 dias
Status de atividade
Estagnada
Clareza
Claramente especificada
Facilidade para iniciantes
48/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.