概要
C++ のフォーマットツール clang-format 及び Visual Studio Code での使い方について解説します。
clang-format
LLVM に付属している主に C++ をターゲットとしたフォーマットツールです。.clang-format
という名前の設定ファイルに yaml 形式で設定を記述することで、細かくフォーマット方法を制御できます。
.clang-format
の例
BasedOnStyle: LLVM
AccessModifierOffset: -4
ColumnLimit: 80
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
DeriveLineEnding: true
IndentCaseBlocks: true
IndentCaseLabels: false
Language: Cpp
Standard: c++14
BraceWrapping: Custom
IndentBraces: true
Visual Studio Code で clang-format を使う方法
Visual Studio Code (VS Code) で使用する方法について解説します。他の IDE やエディタで使用する場合は ClangFormat を参照ください。
VS Code の拡張「C/C++」をインストールすると、clang-format
のバイナリが付属しています。
clang-format
を実行すると、カレントディレクトリから設定ファイル .clang-format
が見つかるまで、親ディレクトリを辿って検索し、最初に見つかった設定ファイルが適用されます。そのため、.clang-format
を作成し、プロジェクトのルートディレクトリに配置することをおすすめします。
プロジェクトのディレクトリ構成例
my_project
├─ CMakeLists.txt
├─ .clang-format
└─ src
└─ main.cpp
VS Code では Shift + Alt + F
で開いているファイルに対して、フォーマットが実行できます。
また、貼り付け時にフォーマットを実行する「Format On Paste」、保存時にフォーマットを行う「Format On Save」という設定項目もあるので、必要に応じて有効にしてください。
.clang-format
の作成方法
100個以上のオプションがあり、特に指定していないオプションは、ベースとなるフォーマットスタイル BasedOnStyle
が適用されます。
まずは、デフォルト設定を決める BasedOnStyle
を「LLVM/Google/Chromium/Mozilla/WebKit/Microsoft/GNU」から選択し、好みに応じて、個別の設定項目を追加するやり方で設定ファイルを作成します。
# デフォルト設定
BasedOnStyle: LLVM
# インデント幅
IndentWidth: 4
# 言語
Language: Cpp
Standard: Auto
# 1行あたりの
ColumnLimit: 120
# 改行コード
UseCRLF: false
# 個別の設定項目を以下似追加
# AccessModifierOffset: -4
全パラメータは Clang-Format Style Options に記載されています。
clang-format-editor
日本語の解説を見ながら、.clang-format
を作成できるツール clang-format-editor を用意したので、こちらで説明を見ながら、自分に合った設定を探してください。
機能
- EN / JP: 説明を表示する言語を設定します。
- UPLOAD (アップロード): 既存の .clang-format ファイルをアップロードすることで、設定を読み込みます。
- SAVE (保存): 設定を .clang-format ファイルとして保存します。
- RESET (リセット): 設定を初期化します。
使い方
- すでに手元に .clang-format ファイルが存在する場合、「UPLOAD (アップロード)」ボタンをクリックしてアップロードします。
- 設定したいオプションの値を選択します。何も設定していないオプションはデフォルトになります。
- 「SAVE (保存)」ボタンをクリックし、
clang-format
ファイルをダウンロードします。ダウンロード後にファイル名の先頭にドットをつけて、.clang-format
ファイルにリネームしてください。(ブラウザの仕様上、ドットから始まるファイル名は使用できないため)
更新履歴
- v0.2.0 (2021/6/5): .clang-format のアップロード機能を追加
- v0.3.0 (2021/8/28): clang-format 13 に対応
コメント
コメント一覧 (8件)
古い記事に恐縮です。
clang-format-editor、便利に使わせてもらっています。
一つ可能なら対応していただきたい点があります。
save時にファイル名を指定できるようにできませんでしょうか。
それができると、保存後に移動しないで済むのですが。
ご利用ありがとうございます。
デフォルトの .clang-format 以外のファイル名で保存でする機能の追加を検討させていただきますね。
作成したのが3年前で当時clang-formatのバージョンは13でしたが、オプションも当時から変わった部分もあるので、そこも更新したいなと思っております。
フィードバックをいただきありがとうございます。