Fixer/ScriptBlock/ScriptBlockAlignBracesAll/ScriptBlockAlignBracesAll.ps1
& { Set-StrictMode -Off # purpose is to reformat scriptblocks # scriptblocks are a common element in many PowerShell structures # and can also be used standalone # to improve readability, this unit identifies the opening and # closing braces and makes sure these braces exist on individual lines # separated from other content (to improve brace alignment) # if a scriptblock is a "one-liner" (start and end brace exist on same line), # then no optimization is done because one-liner are often desired. # the unit also determines whether or not the scriptblock is a parameter # argument. If a scriptblock is a parameter argument, then the opening # brace must be on the same line with the parameter $crlf = -join [Char[]](13,10) $items = [ISESteroids.SteroidsFixer.Helpers]::GetAST('ScriptAndStatementblock') foreach($ScriptBlock in $items) { # get scriptblock content $text = $ScriptBlock.Extent.Text.Trim() # is the scriptblock enclosed by braces? # the top scriptblock is not if ($text.StartsWith('{') -eq $false) { continue } # at this point, we have a scriptblock that may need reformatting if ($ScriptBlock.Parent -ne $null) { $parentStructure = $ScriptBlock.Parent.GetType().Name } else { $parentStructure = '' } # INSERT LINEBREAK BEFORE OPENING BRACE? $token = [ISESteroids.SteroidsFixer.Helpers]::GetTokenUntilLineBreak($ScriptBlock.Extent.StartOffset, 'Backwards') # do not do this if scriptblock is part of a parameter assignment if ($token.Count -gt 0 -and $parentStructure -ne 'ScriptBlockExpressionAst') { $start = $ScriptBlock.Extent.StartOffset $end = $ScriptBlock.Extent.StartOffset [ISESteroids.SteroidsFixer.Helpers]::AddTextChange($start, $end, $crlf) } # INSERT LINEBREAK AFTER OPENING BRACE? $token = [ISESteroids.SteroidsFixer.Helpers]::GetTokenUntilLineBreak($ScriptBlock.Extent.StartOffset,'Forward') if ($token.Count -gt 0 ) { # add crlf after opening brace $start = $ScriptBlock.Extent.StartOffset+1 $end = $ScriptBlock.Extent.StartOffset+1 [ISESteroids.SteroidsFixer.Helpers]::AddTextChange($start, $end, $crlf) } # INSERT LINEBREAK BEFORE CLOSING BRACE? $token = [ISESteroids.SteroidsFixer.Helpers]::GetTokenUntilLineBreak($ScriptBlock.Extent.EndOffset-1, 'Backwards') if ($token.Count -gt 0) { # add crlf before closing brace $start = $ScriptBlock.Extent.EndOffset-1 $end = $ScriptBlock.Extent.EndOffset-1 [ISESteroids.SteroidsFixer.Helpers]::AddTextChange($start, $end, $crlf) } # INSERT LINEBREAK AFTER CLOSING BRACE? $token = [ISESteroids.SteroidsFixer.Helpers]::GetTokenUntilLineBreak($ScriptBlock.Extent.EndOffset-1, 'Forward') if ($token.Count -gt 0 -and $parentStructure -ne 'ScriptBlockExpressionAst') { if (-not($token.Kind -eq 'Pipe' -or $token.Kind -eq 'Comment' -or $token.Kind -eq 'LineContinuation' -or $token.Kind -eq 'Parameter')) { $start = $ScriptBlock.Extent.EndOffset $end = $ScriptBlock.Extent.EndOffset [ISESteroids.SteroidsFixer.Helpers]::AddTextChange($start, $end, $crlf) } } } Invoke-SteroidsTextChange } |