Visual Studio Code PowerShell拡張のVersion 0.9からコードフォーマッターの機能が追加されコードの自動フォーマットができる様になりました。
本エントリでは設定可能なフォーマットスタイルをまとめます。
以降で説明する設定はすべてsettings.json
で設定する項目になります。
1. Visual Studio Code全体の設定と共有される設定
はじめにVisual Studio Code全体とPowerShell拡張で共有される設定について記載します。
editor.tabSize
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. 【2017/07/13追加】スタイルのプリセット
ここからはPowerShell拡張の設定になります。
powershell.codeFormatting.preset (Ver.1.4.0より使用可)
Ver.1.4.0よりコードフォーマットに関する設定が大きく変わり、基本的なスタイルをあらかじめ定義済みのものから選び、細かい部分を個別に設定する様に変更されました。
このpowershell.codeFormatting.preset
では以下のスタイルを選択することができます。
1. OTBS(One True Brace Style)
# } の後に改行を入れない cuddled else ができるスタイル if ($var -eq $true) { # Do the thing } else { # Do something else }
2. Stroustrup
# } の後に改行が必ず入るスタイル if ($var -eq $true) { # Do the thing } else { # Do something else }
3. Allman
# { と } を改行して入れるスタイル if ($var -eq $true) { # Do the thing } else { # Do something else }
4. Custom
すべての設定を自分でカスタマイズするスタイル。
デフォルトはこのスタイルです。
3. ブレーススタイルに関する設定
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 { }
4. スペースに関する設定
powershell.codeFormatting.whitespaceBeforeOpenBrace (Ver.0.10より使用可)
各種キーワードとオープンブレース({
)の間にスペースを強制するか否かを設定します。
デフォルトtrue
です。
コード例)
# trueの場合 # { の前に1スペースが強制される if ($true) { } # falseの場合 # 以下の様な書き方が許容される if ($true){ } if ($true) { }
powershell.codeFormatting.whitespaceBeforeOpenParen (Ver.0.10より使用可)
if
、elseif
、while
、switch
などのキーワードとその条件式(()
の部分)の間にスペースを強制するか否かを設定します。
デフォルト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" }
powershell.codeFormatting.alignPropertyValuePairs (Ver.1.0より使用可)
- 2017/05/11追加
ハッシュテーブル内でキーと値を縦並びに記述した場合に、=
の位置を縦に揃えるか否かを設定します。
デフォルトtrue
です。
この設定は主にDSC Cofigurationを記述する際のハッシュテーブルのフォーマットを想定しているそうです。
コード例)
# trueの場合 # ハッシュテーブル内の = の位置が縦に揃う様にフォーマットされる # ネストしたハッシュテーブルにも対応している $formatTest = @{ Apple = 4 Banana = 3 Tangerine = @{ Orange = 2 CornflowerBlue = 6 } } # falseの場合 # ハッシュテーブル内の = の位置はフォーマットされない # powershell.codeFormatting.whitespaceAroundOperator の設定に従う $formatTest = @{ Apple = 4 Banana = 3 Tangerine = @{ Orange = 2 CornflowerBlue = 6 } }
最後に
普段からコードフォーマットはIDEに任せっきりにな自分にとってこの機能追加はほんとうに助かります。
GitHubのIssueなどを見る限りまだまだフォーマットに関する設定は増えそうですのでこのエントリの内容は随時更新していきたいと思います。