Public/Set-UsingStatementOrder.ps1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using namespace Microsoft.PowerShell.EditorServices.Extensions
using namespace System.Management.Automation.Language

function Set-UsingStatementOrder {
    <#
    .EXTERNALHELP EditorServicesCommandSuite-help.xml
    #>

    [CmdletBinding()]
    [EditorCommand(DisplayName='Sort Using Statements')]
    param()
    end {
        $statements = Find-Ast { $PSItem -is [UsingStatementAst] }

        $groups = $statements | Group-Object UsingStatementKind -AsHashTable -AsString

        $sorted = & {
            if ($groups.Assembly)  { $groups.Assembly  | Sort-Object Name }
            if ($groups.Module)    { $groups.Module    | Sort-Object Name }
            if ($groups.Namespace) { $groups.Namespace | Sort-Object Name }
        } | ForEach-Object -MemberName ToString

        $statements | Join-ScriptExtent | Set-ScriptExtent -Text ($sorted -join [Environment]::NewLine)
    }
}