しばたテックブログ

気分で書いている技術ブログです。

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

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

marketplace.visualstudio.com

本エントリでは設定可能なフォーマットスタイルをまとめます。
以降で説明する設定はすべて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より使用可)

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" 
}

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