gpt4 book ai didi

suppress-warnings - clang-tidy:如何抑制警告?

转载 作者:行者123 更新时间:2023-12-04 01:08:07 27 4
gpt4 key购买 nike

我最近开始尝试 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 而导致的警告。
在这里,我不确定正则表达式是必须匹配完整(绝对)文件名还是文件名的一部分。我试过
-header-filter=.*\/CodeAssistant\/.*.h
它匹配 CodeAssistant 文件夹中的所有绝对头文件名,但它没有抑制来自 gmock-spec-builders.h 文件的警告。
所以最好我想单独抑制每个警告,这样我就可以确定每个警告是否是一个真正的问题,但如果这不可能,我也可以忍受来自整个外部标题的抑制警告。
感谢您的时间。

最佳答案

我通过在 gmock-spec-builders.h 的第 1790 行添加//NOLINT 解决了这个问题

这是差异:

--- gmock-spec-builders.orig.h  2016-09-17 09:46:48.527313088 +0200
+++ gmock-spec-builders.h 2016-09-17 09:46:58.958353697 +0200
@@ -1787,7 +1787,7 @@
#define ON_CALL(obj, call) GMOCK_ON_CALL_IMPL_(obj, call)

#define GMOCK_EXPECT_CALL_IMPL_(obj, call) \
- ((obj).gmock_##call).InternalExpectedAt(__FILE__, __LINE__, #obj, #call)
+ ((obj).gmock_##call).InternalExpectedAt(__FILE__, __LINE__, #obj, #call) // NOLINT
#define EXPECT_CALL(obj, call) GMOCK_EXPECT_CALL_IMPL_(obj, call)

#endif // GMOCK_INCLUDE_GMOCK_GMOCK_SPEC_BUILDERS_H_

最好将这个补丁上传到上游(我在代码中看到了其他 NOLINT)或与 clang-tidy 的人一起发布错误报告。

关于suppress-warnings - clang-tidy:如何抑制警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39527160/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com