我最近开始尝试使用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 文件的警告。
所以最好我想单独抑制每个警告,这样我就可以确定每个警告是否是一个真正的问题,但如果这不可能,我也可以忍受来自整个外部标题的抑制警告。
感谢您的时间。