概要
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 素晴らしいですね。
欲を言えば既存設定をアップロードまたはペーストして再編集できるとありがたいです。
コメントありがとうございます。
たしかに既存設定を編集できたら便利だと思うので、今後のバージョンアップの際に機能追加しようと思います。
—-
2021/06/22: 既存の設定ファイルのアップロード機能を実装しました。
clang-format-editor すごく便利です!
ところで PointerAlignment の日本語の説明が左右逆になってるように見えます… Left だと右に空白が入ると思います。
コメントありがとうございます。
日本語の説明が間違っていた点を修正しました。
AfterEnum
の日本語の説明文がtrueとfalseで逆になっています。
コメントありがとうございます。
ご指摘いただいた点を修正しました。