18

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 ファイルからの警告を抑制しませんでした。

したがって、できれば各警告を個別に抑制して、それが実際の問題であるかどうかを判断できるようにしたいと思いますが、これが不可能な場合は、外部ヘッダー全体からの警告を抑制して生きることもできます。

お時間をいただきありがとうございます。

4

4 に答える 4

0

コマンド ライン オプションを使用して目的を達成できなかったため// NOLINT、受け入れられた回答によって提案された cpp ファイルのコメントを使用します。

また、修正を googletest にプッシュしようとします。

-line-filterオプションの行がフィルタリングされていることがわかりました。しかし、具体的な行を指定しても、とにかく私の問題の本当の解決策にはなりません。Valgrindに実装されているような抑制メカニズムが必要です。

于 2016-10-05T19:13:58.290 に答える