皆さんこんばんは.Advent Calendar終わったのにBitVisorの記事を投稿しています1.
今年個人的に結構便利だと思った設定を思い出したので,共有しておきます.
clang-formatというツールがあり,これを使うと自動でソースファイルを整形してくれます.
BitVisorのコーディング規約に関して,以下の記事があります.
- hdk_2, BitVisorのコーディングスタイル , BitVisor Advent Calendar 2015.
clang-formatのフォーマット設定は.clang-format
に記述することになっています.上記記事を参考に設定してみましょう.
.clang-format
BasedOnStyle: 'google'
AlignConsecutiveAssignments: false
AlignTrailingComments: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: 'None'
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: true
AlwaysBreakBeforeMultilineStrings: false
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: 'None'
BreakBeforeBraces: 'Linux'
ColumnLimit: 80
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
IndentWidth: 8
DerivePointerBinding: true
IndentCaseLabels: false
IndentWrappedFunctionNames: false
PointerAlignment: 'Right'
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: 'Always'
SpacesBeforeTrailingComments: 1
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
Standard: 'Cpp03'
TabWidth: 8
UseTab: 'Always'
上記記事の以下の項目が考慮されてるかなと思います.
- タブは8桁、関数の引数等で折り返しが必要な場合はタブとスペースを組み合わせて位置を合わせる
- 関数定義は関数名の前で改行 (grep用)
- 関数定義・関数呼び出しともに関数名の後ろにスペース
- if文等のキーワードの後ろにもスペース
- 79桁までで折り返す (守られてないところもある)
- 関数定義の { は単独の行に、それ以外のif文等で使われる { は同じ行に } は単独の行に
- 16進数は0xを小文字、その後ろを大文字に
- switch-caseのインデントはswitchとcaseを同じ深さに、ラベルがある場合はラベルも同様
- 行末にスペースやタブを置かない
-
if文等の後ろの文が1文なら { } を省略してもいいし、してないところもある (適当)
- 自分で{}を省略すれば省略されます.
- コメントを含めUS-ASCIIのみ使用
- ,の後ろや演算子の前後には1つ以上のスペース
Base styleがgoogleなのに特に深い理由はありません.上記以外の設定は適当です.
各設定については以下にドキュメントがあります.
使い方
上記の.clang-formatファイルをプロジェクトのルートに配置したあと,
clang-format -i core/main.c
みたいにすればフォーマットされます (-i
オプションでinplaceに変更).
多くのエディタでclang-format用のツールがあると思います.自分はvim-clang-formatを利用しています.
ファイル保存時に自動でフォーマットするようにすると便利ですが,一方で既存のBitVisorのコードが全てこの.clang-formatの設定に従っているわけではなく,フォーマットかけてしまうと変更点が増えてしまい,diffも分かりにくくなるので必要に応じてフォーマットかけたい部分だけ選択してフォーマットするのが良いのかな,と思います.
-
Advent CalendarじゃないとBitVisorの記事を投稿してはいけないというルールはないです ↩