使用NOLINT抑制整洁。如何抑制压制?

时间:2018-07-08 01:31:11

标签: c++ 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?

2 个答案:

答案 0 :(得分:2)

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

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

您所能做的就是找到// NOLINT并替换为// DISABLE_NOLINT等其他(最好是唯一的)文本,运行clang-tidy检查,然后将其替换回去。

如果您真正不想触摸该代码,则可以从源代码构建自己的clang-tidy,您可以在ClangTidyDiagnosticConsumer.cpp中将static bool LineIsMarkedWithNOLINT()修改为始终返回false。或者,如果值得的话,甚至可以使用新的命令行选项来切换行为。

答案 1 :(得分:0)

您根本不需要使用// 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;
}