C++ Lint 何が良いか問題


CI で PR に対して lint を使用する場合にどのようにするのが良いのか。考えた。

cpplint

https://github.com/cpplint/cpplint
error の詳細
ブログズミ: cpplint でコーディングチェック

Google Style Guides に沿っているかどうかのみをチェックしてくれる。
カスタマイズ内容は各チェック項目の有効/無効のみ。
シンプルでわかりやすく、導入コストも低い (python だけ必要)。これで十分ならこれが一番いい。
Google Style Guideline が気に入らない場合や、もっと細かいカスタマイズがしたい場合は別案を検討する。

clang format

Clang 12 documentation - CLANGFORMAT
clang format は formatter だが、--dry-run オプションを指定すれば format せず指摘だけさせることもできる。
カスタマイズ内容が多岐に渡るのが良い。導入コストは高い。

導入方法

Windows の場合は下記サイトの Pre-Built Binaries の LLVM を DL してインストールすれば一緒に入る。
LLVM Download Page

インストール時にパスも通せば、コマンドラインから $ clang-format だけで実行可能。

オプション

$ clang-format -help を Google 翻訳した。

引数が指定されていない場合、標準入力からコードをフォーマットし、結果を標準出力に書き込みます。
が指定されている場合は、ファイルを再フォーマットします。 -i が と一緒に指定されている場合、ファイルはその場で編集されます。それ以外の場合、結果は標準出力に書き込まれます。

usage : clang-format [options] [<file> ...]

OPTIONS:

Clang-format options 内容
--Werror 設定されている場合、フォーマットの警告をエラーに変更します
--assume-filename= 言語を決定するために使用されるファイル名を上書きします。stdinから読み取る場合、clang-format はこのファイル名を想定して言語を決定します。
--cursor= エディター統合から clang 形式を呼び出すときのカーソルの位置
--dry-run 設定されている場合、実際にフォーマットを変更しません
--dump-config 構成オプションを標準出力にダンプして終了します。 -style オプションと一緒に使用できます。
--fallback-style= clang-format が -style=file で呼び出されたが、使用する .clang-format ファイルが見つからない場合のフォールバックとして使用される定義済みスタイルの名前。フォーマットをスキップするには、-fallback-style=none を使用します。
--ferror-limit= 停止する前に発生する clang 形式のエラーの最大数を設定します (0=制限なし)。 --dry-runまたは-nでのみ使用されます
-i 指定されている場合、編集 を配置します。
--length= この長さの範囲をフォーマットします (バイト単位)。複数の -offset と -length のペアを指定することにより、複数の範囲をフォーマットできます。 -length なしで -offset を1つだけ指定すると、clang-format はファイルの最後までフォーマットします。 1つの入力ファイルでのみ使用できます。
--lines=-: 行の範囲をフォーマットします (両方とも1ベース)。複数の -lines 引数を指定することにより、複数の範囲をフォーマットできます。 -offset および -length と一緒に使用することはできません。 1つの入力ファイルでのみ使用できます。
-n --dry-runのエイリアス
--offset= このバイトオフセットで始まる範囲をフォーマットします。複数の -offset と -length のペアを指定することにより、複数の範囲をフォーマットできます。 1つの入力ファイルでのみ使用できます。
--output-replacements-xml 置換を XML として出力します。
--sort-includes 設定されている場合、SortIncludes スタイルフラグによって決定されるインクルードのソート動作をオーバーライドします
--style= 現在サポートされているコーディングスタイル : LLVM、Google、Chromium、Mozilla、WebKit。 -style=file を使用して、ソースファイル (または stdin の現在のディレクトリ) の親ディレクトリの1つにある .clang-format ファイルからスタイル構成をロードします。 -style="{key: value,...}" を使用して特定のパラメーターを設定します。例 : -style="{BasedOnStyle: llvm, IndentWidth: 8}"
--verbose 設定されている場合、処理されたファイルのリストを表示します

希望するコードのフォーマットスタイルが使用可能なオプションと異なる場合、-style="{key: value,...}" オプションを使用するか、スタイル構成ファイル .clang-format または _clang-format をプロジェクトのディレクトリに配置して clang-format-style=file を使用します。

.clang形式のファイルを作成する簡単な方法は次のとおりです。
clang-format -style = llvm -dump-config> .clang-format

Style Options

Clang 12 documentation - CLANG-FORMAT STYLE OPTIONS
ClangFormatスタイルオプション
clang-formatのstyle比較
clang-format を イイ感じに設定する