11

我有几个项目有很多我想解析的标题,但是有几个我不想用 clang-tidy 解析的标题

我的文件夹层次结构如下

一个\

    B\

        C\
           coco.h
        D\
    E\

我的项目位于 C 和 D 文件夹中,我希望它们解析 B 下的所有标题,所以我的解决方案是 HeaderFilterRegex: 'B/*' 我想包含许多标题,所以我无法命名每个标题。

但是在 C 和 D 文件夹中,有几个我想排除的标题(例如 coco.h)。

我尝试将 NO_LINT 放在包含 coco.h 的 cpp 中,但没有帮助,

我怎样才能做到这一点?

谢谢

4

3 回答 3

5

我找到了一个适合我目的的解决方法(我想要过滤掉的文件列表有限,并且它们具有唯一的名称)

我使用行过滤器并添加我想要过滤掉的所有文件。在行范围内,我放了一条不存在的行,这样它就可以过滤掉文件。在行过滤器的末尾,我添加了 .h 和 .cpp ,这样它将过滤其余文件。

eglets说我只想过滤掉coco.cpp

-line-filter=[{"name":"coco.cpp","lines":[[9999999,9999999]]},{"name":".h"},{"name":".cpp"}]

需要注意的一件事,以及我认为它不起作用的原因如下:行过滤器仅在进行分析后才起作用,而标题过滤器仅对包含起作用。

在 coco.cpp 中,我有一行(调用模板)引起了警告,但警告显示在应该被 header-filter 过滤掉的 header 上。

它没有被过滤掉,因为警告是由 cpp 引起的,但实际警告显示在标题上,所以行过滤器没有帮助,直到我将这个特定的标题也放入行过滤器中。

不是很直观。

于 2019-05-27T04:39:42.537 回答
2

可以(尽管公认笨拙)为此使用该header-filter选项。

如果您将不希望处理的文件重命名为具有与其他头文件不同的后缀(例如 .h_nolint 而不是 .h),则可以使用头过滤器仅匹配 *.h 文件,如下所示:

 -header-filter=\.h$

(clang-tidy 使用 POSIX ERE)

当然,这样做的代价是除了重命名文件之外,还必须重命名代码中所有相应的标头引用,但一个体面的 IDE 应该能够处理它。

于 2019-05-17T08:30:59.067 回答
0

从选项的名称来看,您似乎需要输入 a regex,在这种情况下,您的语法有错误。也许

HeaderFilterRegex: 'B/' 是您所需要的,或者 HeaderFilterRegex: 如果您想真正具体地过滤掉仅hpp文件,则可能是 B/.*\.hpp$'

于 2021-04-23T13:33:37.207 回答