【问题标题】:Exclude specific headers from clang-tidy从 clang-tidy 中排除特定标头
【发布时间】:2019-10-01 03:29:37
【问题描述】:

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

我的文件夹层次如下

一个\

    B\

        C\
           coco.h
        D\
    E\

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

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

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

我该怎么做?

谢谢

【问题讨论】:

    标签: clang-tidy


    【解决方案1】:

    可以使用header-filter 选项来解决这个问题(虽然有些笨拙)。

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

     -header-filter=\.h$
    

    (clang-tidy 使用 POSIX ERE)

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

    【讨论】:

      【解决方案2】:

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

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

      例如,假设我只想过滤掉 coco.cpp

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

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

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

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

      不是很直观。

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 2020-04-08
          • 2018-09-10
          • 2015-03-18
          • 1970-01-01
          • 2021-06-19
          • 2013-07-20
          • 2020-07-20
          • 2018-10-25
          • 2020-07-26
          相关资源
          最近更新 更多