PowerShell / PSScriptAnalyzer

Download ScriptAnalyzer from PowerShellGallery
https://www.powershellgallery.com/packages/PSScriptAnalyzer/
MIT License
1.87k stars 379 forks source link

IncreaseIndentationForFirstPipeline incorrectly closes parent block depending on placement of pipe on beginning or end of line #2038

Closed cure1245 closed 1 month ago

cure1245 commented 1 month ago

Before submitting a bug report:

Steps to reproduce

I have a function that uses XMLDocument.SelectNodes to grab attribute nodes, name them with a PSObject, and then filter them using Where-Object.

Expected behavior

# The expected behavior is for the bracket closing the ForEach-Object block to be directly under the F:
    process {
        $syncXml.SelectNodes('//@LDAPGroupName') |
            ForEach-Object {
                [PSCustomObject]@{ Group = $_.Value } |
                    Where-Object { $_.Group -like $Group }
            }
    }

Actual behavior

If we leave the pipes at the end of the lines as is standard practice, we get this:

# the close of the ForEach-Object block now appears under the bracket of the type designation
    process {
        $syncXml.SelectNodes('//@LDAPGroupName') |
            ForEach-Object {
                [PSCustomObject]@{ Group = $_.Value } |
                    Where-Object { $_.Group -like $Group }
                }

    }

However, the formatter correctly places the closing brace if we move the last pipe to the next line:

# Moving the pipe fixes the issue:
    process {
        $syncXml.SelectNodes('//@LDAPGroupName') |
            ForEach-Object {
                [PSCustomObject]@{ Group = $_.Value }
                | Where-Object { $_.Group -like $Group }
            }
    }

If an unexpected error was thrown then please report the full error details using e.g. $error[0] | Select-Object *

Environment data

> $PSVersionTable

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

> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }

1.22.0
SydneyhSmith commented 1 month ago

This may be a dupe of #1976 or at least a similar issue

cure1245 commented 1 month ago

Yeah, I was kind of iffy on if it was similar enough or not to that one to warrant a new issue.

microsoft-github-policy-service[bot] commented 1 month ago

This issue has been marked as duplicate and has not had any activity for 1 day. It will be closed for housekeeping purposes.