我有如下代码
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?
我有如下代码
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?
AFAIK 没有简单的方法可以按照您想要的方式执行此操作。每当 clang-tidy 找到 NOLINT 注释时,它就会跳过该行,没有命令行选项可以防止这种行为。
由于 NOLINT 放置在注释中,因此您不能使用预处理器,因为注释在宏扩展之前被剥离。
您可以做的是查找并替换// NOLINT
为其他一些(最好是唯一的)文本// DISABLE_NOLINT
,例如运行您的 clang-tidy 检查,然后将其替换回来。
如果您真的不想接触该代码,您可以从您static bool LineIsMarkedWithNOLINT()
在 ClangTidyDiagnosticConsumer.cpp 中修改的源代码构建自己的 clang-tidy,以始终返回 false。或者,如果值得您付出努力,甚至可以创建一个新的命令行选项来切换行为。
你根本不需要使用// NOLINT
。只需删除参数名称或将它们添加到注释中即可。这将使编译器和 Clang Tidy 静音。
int do_thing( int arg1, int /*arg2*/, int /*arg3*/ ) {
return arg1;
}
另一种选择是使用[[maybe_unused]]
C++ 17 中引入的属性:
int do_thing( int arg1, [[maybe_unused]] int arg2, [[maybe_unused]] int arg3 ) {
return arg1;
}