使用NOLINT来抑制clang-tidy的警告。我如何取消抑制?

5
我有以下代码:
int do_thing( int arg1, int arg2, int arg3 ) { // NOLINT : don't care that arg2 and arg3 aren't used
  return arg1;
}

NOLINT注释通常可以抑制clang-tidy警告,但是如何在不更改代码的情况下“重新启用”clang-tidy?

2个回答

6
据我所知,按照您的要求没有简单的方法来完成这个任务。每当clang-tidy发现NOLINT注释时,它就会跳过该行,没有命令行选项可以阻止此行为。
由于NOLINT放置在注释中,因此您无法使用预处理器,因为注释在宏展开之前被剥离。
您可以做的是查找并替换// NOLINT为其他一些(最好是独特的)文本,比如// DISABLE_NOLINT,运行您的clang-tidy检查,然后将其替换回来。
如果您真的不想触碰那段代码,您可以从源代码构建自己的clang-tidy,在其中修改ClangTidyDiagnosticConsumer.cpp中的static bool LineIsMarkedWithNOLINT()以始终返回false。甚至可以创建一个新的命令行选项来切换行为,如果这对您来说值得付出努力的话。

2
你根本不需要使用 // NOLINT。只需要删除参数名称或将其转换为注释即可。这样可以让编译器和Clang Tidy静音。
int do_thing( int arg1, int /*arg2*/, int /*arg3*/ ) {
  return arg1;
}

另一个选择是使用在 C++ 17 中引入的 [[maybe_unused]] 属性:
int do_thing( int arg1, [[maybe_unused]] int arg2, [[maybe_unused]] int arg3 ) {
  return arg1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接