12

我正在开发一个 C++ 项目,该项目有一些自动生成的大段代码,我不想被 linted。有没有类似于//NOLINT可以应用于多行的注释的东西?如下所示:

// BEGINNOLINT
bad-code;
// ENDNOLINT

我只能在网上找到一个建议,即应该实施。有没有办法避免在// NOLINT每一行的末尾写?

4

3 回答 3

8

clang-tidy 14将引入此功能:

// NOLINTBEGIN
...
// NOLINTEND

请注意,如果要禁用特定警告,则 end-comment 必须与 begin-comment 匹配:

// NOLINTBEGIN(check-name)
...
// NOLINTEND(check-name)
于 2021-10-15T10:34:24.193 回答
5

不幸的是,没有直接的方法可以做到这一点,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 行。然而,这很难维护,因为每次在文件中添加/删除行时都需要更新过滤器。如果可能的话,将代码生成到单独的文件中可能是个好主意。

于 2019-03-20T13:32:24.310 回答
-1

我确定,当我申请//NOLINTNEXTLINEMACRO 时,会跳过整个 MARCO。所以尝试实现//NOLINTNEXTLINE你的类或函数

于 2021-05-25T07:29:46.373 回答