1. ホーム
  2. git

[解決済み] clang-formatは書式の変更が必要かどうか教えてくれますか?

2023-04-30 11:50:41

質問

このような場合 clang-format を実行し、ファイルが指定された形式を満たしているかどうかを報告するような方法はありますか?変更が必要な場合は報告するが、変更は行わないというドライランモードのようなものです。理想的には、ファイルが変更を必要とする場合、clang-formatがゼロ以外の終了コードを返すようにしたいのですが。あるいは、さらに理想的なのは、ゼロでない終了コードと、標準出力に変更が必要なファイルのリストを表示することです。

私はより多くの人々が答えることができるように、質問を一般的なものに保とうとしていますが、私がしようとしていることは、期待される.clang-formatに一致しないすべてのコミットを拒否するgit pre-commitフックを書くことです。インデックスにあるファイルのリストに対してclang-formatを実行するのは簡単です。しかし、clang-formatが実際に何かを変更したかどうかを知るのは難しいです。

に基づいて、1つの潜在的な解決策を持っています。 -output-replacements-xml (に基づく1つの潜在的な解決策を持っています(それは私が答えとして投稿します)、しかしそれはハックで、私はこれがより簡単であるべきだと感じています。コメント/提案、編集、異なる回答/アプローチはすべて歓迎されます。

どのように解決するのですか?

を使用します。 --dry-run-Werror コマンドラインオプションを使います。これらはClangFormatにフォーマット違反をstdoutに出力させ、入力ファイルが正しくフォーマットされていない場合は0以外の終了ステータスを返させます。

$ clang-format --dry-run --Werror foo.cpp
foo.cpp:129:23: error: code should be clang-formatted [-Wclang-format-violations]
        if (rc <= 0) {
$ echo $?
1

元はこちらのサイトです。 https://rigtorp.se/notes/clang-format/