VSCode のフォーマットをプロジェクトで統一したい

概要

Unityで個人制作中、VSCodeでコードを書いている時、複数人で同じプロジェクトを開発している場合フォーマットを合わせるのをどうすれば良いのか気になり調べました。

今回はフォーマット設定ファイルをGitで共有する所まで (Mac環境でVSCodeを利用している場合です)

スペース、タブの可視化

よくあるフォーマット宗教としてスペースorタブ問題があると思います

コード上でタブをスペースとして変換するのか、タブをそのままタブとして使用するのか。
とりあえず、コードを開いた時にスペースなのかタブか一発で分かるように可視化します。

Cmd + , から Settings を開き whitespace といれると出てくる Render Whitespace を none から boundary(境界) に変換します。

f:id:toshizabeth:20210404140238p:plain

これで変数やメソッド間の空白以外の場所に ....(空白)→ (タブ) が表示されます

f:id:toshizabeth:20210404141236p:plain

他にも設定ありますがこれが一番邪魔にならずに使いやすいかと思います

C#のフォーマット設定は omnisharp.json を見るようにする

プロジェクトで同じフォーマット設定を利用するために omnisharp.json にフォーマット設定を記述します。

まず、settings.json を編集します。

Settingsを開き、右上の赤丸内のアイコンを押して json直接編集モードにします

f:id:toshizabeth:20210404141353p:plain

そこに以下の記述を追加します

{
...
    "[csharp]": {
        "editor.defaultFormatter": "ms-dotnettools.csharp"
    },
    "omnisharp.useEditorFormattingSettings": false,
}


C#コードではデフォルトのフォーマットは ms-dotnettools.csharp を利用する

② useEditorFormattingSettigsはfalseにして、VSCodeのフォーマット設定は利用しない


そしてプロジェクト直下に omnisharp.json ファイルを作成します。

中にフォーマット設定を追加します

{
    "FormattingOptions": {
      "newLine": "\n",
      "useTabs": true
  }
}

これはタブをそのままタブとして利用する設定です!!

もしタブをスペースにする場合は以下でしょうか

{
    "FormattingOptions": {
      "newLine": "\n",
      "useTabs": false,
      "TabSize": 4,
  }
}

これで保存してVSCodeを再起動します
再起動後、読み込み完了まで少し待機...

フォーマット変更したいファイルを開いた状態でAlt+Shift+F を押して全体にフォーマットかけるようにしたら無事に変更されるようになりました。


後はこの omnisharp.json をコミットしバージョン管理されれば他の共同開発者も同じ設定が適用されるようになります


基本デフォルトが良いと思っており、その他のフォーマットは特に触っていません。

その他の設定や、omnisharpの構成ファイル読み込み優先順位等の解説は以下のブログに詳しく書いてくれています

www.strathweb.com