読者です 読者をやめる 読者になる 読者になる

素敵なおひげですね

PowerShellを中心に気分で書いているブログです。

Visual Studio Code PowerShell拡張で設定可能なコードフォーマットまとめ

PowerShell VSCode

Visual Studio Code PowerShell拡張のVersion 0.9からコードフォーマッターの機能が追加されコードの自動フォーマットができる様になりました。

marketplace.visualstudio.com

本エントリでは設定可能なフォーマットスタイルをまとめます。
以降で説明する設定はすべてsettings.jsonで設定する項目になります。

1. Visual Studio Code全体の設定と共有される設定

はじめにVisual Studio Code全体とPowerShell拡張で共有される設定について記載します。

editor.tabSize (Ver.0.9より使用可)

1タブ当たりのスペース数です。
デフォルト4タブです。

editor.formatOnSave (Ver.0.9より使用可)

ファイルの保存時に自動フォーマットするか否かの設定です。
デフォルトfalseです。

editor.formatOnType (Ver.0.10より使用可)

エディター入力時に自動フォーマットするか否かの設定です。
デフォルトfalseです。
Ver.0.10で利用可能になりました。

editor.formatOnPaste (Ver.0.9より使用可)

エディターにペーストした際に自動フォーマットするか否かの設定です。
デフォルトfalseです。

この設定に関してはリリースノートに明記されていなかったのですがVer.0.9から利用可能だった様です。
ただバグがあった様で実質Ver.0.10から使える様になった感じです。

2. ブレーススタイルに関する設定

ここからはPowerShell拡張の設定になります。

powershell.codeFormatting.openBraceOnSameLine (Ver.0.9より使用可)

オープンブレース({)を関連する文と同じ行に記載するか否かの設定です。
デフォルトtrueです。

コード例)

# trueの場合
if ($true) {
    
}

# falseの場合
if ($true)
{
    
}

powershell.codeFormatting.newLineAfterOpenBrace (Ver.0.9より使用可)

オープンブレース({)の後は改行するかどうかを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   { の後は強制的に改行される
if ($true) {
    Write-Output "Hello"
}

# falseの場合
#   以下の様な書き方が許容される
if ($true) { Write-Output "Hello"
}

powershell.codeFormatting.newLineAfterCloseBrace (Ver.0.10より使用可)

クローズブレース(})の後は改行するかどうかを設定します。 デフォルトtrueです。

コード例)

# trueの場合
#   } の後は強制的に改行される
if ($true) {
    
}
else {
    
}

# falseの場合
#   } の後改行されないので、cuddled elseが許容される
if ($true) {
    
} else {
    
}

3. スペースに関する設定

powershell.codeFormatting.whitespaceBeforeOpenBrace (Ver.0.10より使用可)

各種キーワードとオープンブレース({)の間にスペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   { の前に1スペースが強制される
if ($true) {
}

# falseの場合
#   以下の様な書き方が許容される
if ($true){
}
if ($true)     {
}

powershell.codeFormatting.whitespaceBeforeOpenParen (Ver.0.10より使用可)

ifelseifwhileswitchなどのキーワードとその条件式(()の部分)の間にスペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   if の後に1スペースが強制される
if ($true) {
}

# falseの場合
#   以下の様な書き方が許容される
if($true) {
}
if      ($true) {
}

powershell.codeFormatting.whitespaceAroundOperator (Ver.0.10より使用可)

二項演算子および代入演算子の両側に1スペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   = や * の間に1スペースが強制される
$y = $x * 2

# falseの場合
#   以下の様な書き方が許容される
$y=$x*2
$y   =   $x   *   2

powershell.codeFormatting.whitespaceAfterSeparator (Ver.0.10より使用可)

セパレーター(,;)の後に1スペースを強制するか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   ;の後に1スペースが強制される
Write-Output "Hello"; Write-Output "World"

# falseの場合
#   以下の様な書き方が許容される。
Write-Output "Hello";Write-Output "World"
Write-Output "Hello";      Write-Output "World"

powershell.codeFormatting.ignoreOneLineBlock (Ver.0.10より使用可)

1行で収まるif文やスクリプトブロックはフォーマットの対象外にするか否かを設定します。
デフォルトtrueです。

コード例)

# trueの場合
#   以下の様に1行で収まるif文はコードフォーマットされない
$result = if ($cond) { Write-Output "True" } else { Write-Output "False" }

# falseの場合
#   1行で収まろうともコードフォーマットが強制される
$result = if ($cond) {
    Write-Output "True" 
}
else {
    Write-Output "False" 
}

最後に

普段からコードフォーマットはIDEに任せっきりにな自分にとってこの機能追加はほんとうに助かります。

GitHubのIssueなどを見る限りまだまだフォーマットに関する設定は増えそうですのでこのエントリの内容は随時更新していきたいと思います。