3

我有如下代码

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?

4

2 回答 2

5

AFAIK 没有简单的方法可以按照您想要的方式执行此操作。每当 clang-tidy 找到 NOLINT 注释时,它就会跳过该行,没有命令行选项可以防止这种行为。

由于 NOLINT 放置在注释中,因此您不能使用预处理器,因为注释在宏扩展之前被剥离。

您可以做的是查找并替换// NOLINT为其他一些(最好是唯一的)文本// DISABLE_NOLINT,例如运行您的 clang-tidy 检查,然后将其替换回来。

如果您真的不想接触该代码,您可以从您static bool LineIsMarkedWithNOLINT()在 ClangTidyDiagnosticConsumer.cpp 中修改的源代码构建自己的 clang-tidy,以始终返回 false。或者,如果值得您付出努力,甚至可以创建一个新的命令行选项来切换行为。

于 2018-07-13T06:43:34.010 回答
2

你根本不需要使用// 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;
}
于 2020-08-23T21:36:13.977 回答