LoginSignup
0
0

More than 5 years have passed since last update.

BitVisor用のclang-format設定

Posted at

皆さんこんばんは.Advent Calendar終わったのにBitVisorの記事を投稿しています:joy:1
今年個人的に結構便利だと思った設定を思い出したので,共有しておきます.


clang-formatというツールがあり,これを使うと自動でソースファイルを整形してくれます.

BitVisorのコーディング規約に関して,以下の記事があります.

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'

上記記事の以下の項目が考慮されてるかなと思います.

  • :o: タブは8桁、関数の引数等で折り返しが必要な場合はタブとスペースを組み合わせて位置を合わせる
  • :o: 関数定義は関数名の前で改行 (grep用)
  • :o: 関数定義・関数呼び出しともに関数名の後ろにスペース
  • :o: if文等のキーワードの後ろにもスペース
  • :o: 79桁までで折り返す (守られてないところもある)
  • :o: 関数定義の { は単独の行に、それ以外のif文等で使われる { は同じ行に } は単独の行に
  • 16進数は0xを小文字、その後ろを大文字に
  • :o: switch-caseのインデントはswitchとcaseを同じ深さに、ラベルがある場合はラベルも同様
  • :o: 行末にスペースやタブを置かない
  • :o: if文等の後ろの文が1文なら { } を省略してもいいし、してないところもある (適当)
    • 自分で{}を省略すれば省略されます.
  • コメントを含めUS-ASCIIのみ使用
  • :o: ,の後ろや演算子の前後には1つ以上のスペース

Base styleがgoogleなのに特に深い理由はありません.上記以外の設定は適当です.
各設定については以下にドキュメントがあります.

使い方

上記の.clang-formatファイルをプロジェクトのルートに配置したあと,

clang-format -i core/main.c

みたいにすればフォーマットされます (-iオプションでinplaceに変更).

多くのエディタでclang-format用のツールがあると思います.自分はvim-clang-formatを利用しています.

ファイル保存時に自動でフォーマットするようにすると便利ですが,一方で既存のBitVisorのコードが全てこの.clang-formatの設定に従っているわけではなく,フォーマットかけてしまうと変更点が増えてしまい,diffも分かりにくくなるので必要に応じてフォーマットかけたい部分だけ選択してフォーマットするのが良いのかな,と思います.


  1. Advent CalendarじゃないとBitVisorの記事を投稿してはいけないというルールはないです:joy: 

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0