皆さんこんばんは.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の記事を投稿してはいけないというルールはないです
↩