clang-tidy
最近、llvmのツールを試し始めました。現在、サードパーティのライブラリ コードからの誤った警告を抑制しようとしています。このために、コマンドラインオプションを使用したい
-header-filter=<string>
また-line-filter=<string>
しかし、これまでのところ成功していません。時間が限られている人のために、最初にここに質問を置き、後で私がすでに試したことを説明します.
質問
clang-tidy
特定の行やファイルからの警告を抑制するには、ツールにどのオプションを指定する必要がありますか?
これが不可能な場合
外部ヘッダー ファイルからの警告を抑制するために機能するオプションはどれですか?
これまでに行ったこと
私の最初のclang-tidyへの呼び出しは次のようになります
clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p Generated/LinuxMakeClangNoPCH Sources/CodeAssistant/ModuleListsFileManipulator_fixtures.cpp
抑制したい生成された警告の最初の行は次のようになります
.../gmock/gmock-spec-builders.h:1272:5: warning: Use of memory after it is freed [clang-analyzer-cplusplus.NewDelete]
return function_mocker_->AddNewExpectation(
gmock の人から、これは誤検知だと言われたので、抑制したいと思います。まずは-line-filter=<string>
オプションを使ってみました。ドキュメントには次のように記載されています。
-line-filter=<string> - List of files with line ranges to filter the
warnings. Can be used together with
-header-filter. The format of the list is a JSON
array of objects:
[
{"name":"file1.cpp","lines":[[1,3],[5,7]]},
{"name":"file2.h"}
]
指定された行の警告は除外されると想定しました。しかし、ドキュメントには、それらがフィルターで除外されているか、除外されているかは記載されていません。いくつかいじった後、コンテンツを含む.jsonファイルを作成しました
[
{"name":"gmock-spec-builders.h","lines":[[1272,1272]]}
]
コマンドラインを次のように変更しました
clang-tidy-3.8 -checks=-*,clang-analyzer-*,-clang-analyzer-alpha* -p Generated/LinuxMakeClangNoPCH -line-filter="$(< Sources/CodeAssistant/CodeAssistant_ClangTidySuppressions.json)" Sources/CodeAssistant/ModuleListsFileManipulator_fixtures.cpp
ファイルの内容を引数に書き込みます。これにより、警告が抑制されますが、この警告だけでなく、ModuleListsFileManipulator_fixtures.cpp ファイルからのすべての警告も抑制されます。もっといろいろ試してみましたが、うまくいきませんでした。
-header-filter=<string>
ということでオプションをつけてみました。ここで、ドキュメントには、診断が表示されるすべてのヘッダー ファイルに一致する正規表現を指定する必要があると記載されています。わかりました、分析した .cpp ファイルと同じフォルダーにあるすべてのものに一致する正規表現を使用しましょう。私はそれを受け入れることができますが、外部ヘッダーを間違って使用した結果として生じる警告が削除される場合があります。
ここで、正規表現が完全な (絶対) ファイル名と一致する必要があるのか、それともファイル名の一部のみと一致する必要があるのかがわかりませんでした。私は試した
-header-filter=.*\/CodeAssistant\/.*.h
これは、CodeAssistant フォルダー内のすべての絶対ヘッダー ファイル名に一致しますが、gmock-spec-builders.h ファイルからの警告を抑制しませんでした。
したがって、できれば各警告を個別に抑制して、それが実際の問題であるかどうかを判断できるようにしたいと思いますが、これが不可能な場合は、外部ヘッダー全体からの警告を抑制して生きることもできます。
お時間をいただきありがとうございます。