从clang-tidy排除特定的标头

时间:2019-05-14 07:06:03

标签: clang-tidy

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

我的文件夹层次结构如下

A \

    B\

        C\
           coco.h
        D\
    E\

我的项目位于C和D文件夹中,我希望它们解析B下的所有标头,因此我的解决方案是 HeaderFilterRegex:“ B / *” 我想包含很多标头,所以我不能为每个标头命名。

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

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

我该怎么做?

谢谢

3 个答案:

答案 0 :(得分:1)

我找到了适合自己目的的解决方法(我要过滤的文件数量有限,并且具有唯一的名称)

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

例如说我只想过滤掉coco.cpp -line-filter = [{“ name”:“ coco.cpp”,“ lines”:[[9999999,9999999]]},{“ name”:“。h”},{“ name”:“。cpp” }]

要注意的一件事是,为什么我认为它不起作用:行过滤器仅在进行分析后才起作用,而页眉过滤器仅对include起作用。

在coco.cpp中,我有一行(调用模板)引起了警告,但是警告显示在应该由标题过滤器过滤掉的标题上。

它没有被过滤掉,因为警告是由于cpp引起的,但是实际的警告显示在标题上,因此行过滤器直到我也将特定的标题也放入行过滤器后才有用。

不是很直观

答案 1 :(得分:0)

有可能(尽管很笨拙)为此使用header-filter选项。

如果重命名不需要处理的文件,使其后缀与其他头文件不同(例如,用.h_nolint代替.h),则可以使用头过滤器仅匹配* .h文件:

 -header-filter=\.h$

(clang-tidy使用POSIX ERE)

这当然要付出代价,除了重命名文件外,还必须重命名代码中的所有相应标头引用,但是不错的IDE应该能够处理它。

答案 2 :(得分:0)

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

HeaderFilterRegex: 'B/' 就是你所需要的,或者也许 HeaderFilterRegex: B/.*\.hpp$' 如果您想具体过滤仅 hpp 个文件