使用 NOLINT 抑制 clang-tidy。怎么才能压抑压抑?
Using NOLINT to suppress clang-tidy. How can I suppress the suppression?
我有如下代码
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 警告。但是,我如何 'reenable' clang-tidy 那行 w/o 更改我的代码?
据我所知,没有简单的方法可以按照您想要的方式执行此操作。每当 clang-tidy 发现 NOLINT 注释时,它只会跳过该行,没有命令行选项可以防止这种行为。
由于 NOLINT 放在注释中,您不能使用预处理器,因为注释在宏扩展之前被删除。
您可以找到 // NOLINT
并将其替换为其他一些(最好是唯一的)文本,例如 // DISABLE_NOLINT
、运行 您的 clang-tidy 检查,然后将其替换回去。
如果您真的不想触及该代码,您可以从修改 ClangTidyDiagnosticConsumer.cpp 中的 static bool LineIsMarkedWithNOLINT()
的源代码构建自己的 clang-tidy总是 return 错误。或者甚至创建一个新的命令行选项来切换行为,如果这对您来说是值得的。
您根本不需要使用 // 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;
}
我有如下代码
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 警告。但是,我如何 'reenable' clang-tidy 那行 w/o 更改我的代码?
据我所知,没有简单的方法可以按照您想要的方式执行此操作。每当 clang-tidy 发现 NOLINT 注释时,它只会跳过该行,没有命令行选项可以防止这种行为。
由于 NOLINT 放在注释中,您不能使用预处理器,因为注释在宏扩展之前被删除。
您可以找到 // NOLINT
并将其替换为其他一些(最好是唯一的)文本,例如 // DISABLE_NOLINT
、运行 您的 clang-tidy 检查,然后将其替换回去。
如果您真的不想触及该代码,您可以从修改 ClangTidyDiagnosticConsumer.cpp 中的 static bool LineIsMarkedWithNOLINT()
的源代码构建自己的 clang-tidy总是 return 错误。或者甚至创建一个新的命令行选项来切换行为,如果这对您来说是值得的。
您根本不需要使用 // 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;
}