我有几个项目,我想解析很多标题,但有几个标题我不想用 clang-tidy 解析
我的文件夹层次结构如下
一种\
B\
C\
coco.h
D\
E\
Run Code Online (Sandbox Code Playgroud)
我的项目在 C 和 D 文件夹中,我希望它们解析 B 下的所有标题,所以我的解决方案是 HeaderFilterRegex: 'B/*' 我想包含很多标题,所以我无法命名每个标题。
但是在 C 和 D 文件夹中有几个我想排除的标题(例如 coco.h)。
我尝试将 NO_LINT 放在包含 coco.h 的 cpp 中,但没有帮助,
我怎样才能做到这一点?
谢谢
我找到了一个适合我的目的的解决方法(我有一个有限的文件列表,我想过滤掉它们并且它们具有唯一的名称)
我使用行过滤器并添加我想过滤掉的所有文件。在行范围中,我放了一条不存在的行,这样它就会过滤掉文件。在行过滤器的末尾,我添加了 .h 和 .cpp,因此它将过滤其余文件。
Eglets 说我只想过滤掉 coco.cpp
-line-filter=[{"name":"coco.cpp","lines":[[9999999,9999999]]},{"name":".h"},{"name":".cpp"}]
Run Code Online (Sandbox Code Playgroud)
需要注意的一件事,以及我认为它不起作用的原因如下:行过滤器仅在进行分析后才有效,而标头过滤器仅适用于包含。
在 coco.cpp 中,我有一行(调用模板)导致警告,但警告显示在应该由 header-filter 过滤掉的标题上。
它没有被过滤掉,因为警告是由 cpp 引起的,但实际警告显示在标题上,因此在我将这个特定标题也放入行过滤器之前,行过滤器没有帮助。
不是很直观。
可以使用header-filter
该选项(尽管确实很笨拙)。
如果您将不希望处理的文件重命名为具有与其他头文件不同的后缀(例如 .h_nolint 而不是 .h),则可以使用标头过滤器仅匹配 *.h 文件,如下所示:
-header-filter=\.h$
Run Code Online (Sandbox Code Playgroud)
(clang-tidy 使用 POSIX ERE)
当然,除了重命名文件之外,还必须重命名代码中所有相应的标头引用,但一个像样的 IDE 应该能够处理它。