lang整洁的“ NOLINT”多行?

时间:2019-03-14 15:03:24

标签: clang clang-tidy

我正在一个C ++项目中,该项目具有自动生成的大部分代码,并且我不希望被删除。是否有类似于//NOLINT注释的内容可以应用于多行?如下所示:

// BEGINNOLINT
bad-code;
// ENDNOLINT

我在网上只能找到一个suggestion that this should be implemented。有什么方法可以避免在每一行的末尾写// NOLINT

2 个答案:

答案 0 :(得分:1)

不幸的是,没有直接的方法可以执行此操作,clang-tidy仅支持//NOLINT//NOLINTNEXTLINE

我不知道您对代码生成有多少控制权...您可以在一行中生成它,这对您有很大帮助,因为c ++不在乎空白。

一种粗略而有效的解决方案是使用诸如sed之类的文本处理工具:

$ sed -i -re '/^\/\/BEGIN_NOLINT/,/^\/\/END_NOLINT/{s/$/\/\/NOLINT/}' *.cpp

这将在//NOLINT//BEGIN_NOLINT注释之间的每一行的末尾添加//END_NOLINT(可能会生成)。

您还可以使用参数运行clang-tidy

-line-filter='[{"name":"test.cpp","lines":[[1,10],[12,100]]}]'

在此示例中,将跳过第11行。但是,这很难维护,因为每次添加/删除文件中的行时都需要更新过滤器。如果可能的话,最好将代码生成到单独的文件中。

答案 1 :(得分:0)

我确定,当我在 MACRO 上应用 //NOLINTNEXTLINE 时,会跳过整个 MARCO。所以尝试在你的类或函数中实现 //NOLINTNEXTLINE