是否可以使用 clang-tidy 忽略标头

iva*_*ult 11 clang-tidy

我想包含来自外部项目的标头,但 clang-tidy 对此非常不满意,并生成了大量警告列表。为了解决这个问题,我尝试禁用来自此标头的所有诊断。

我试过:

// NOLINTBEGIN
// NOLINTNEXTLINE
#include <bad.hpp> // NOLINT
// NOLINTEND
Run Code Online (Sandbox Code Playgroud)

但不幸的是,这不起作用。

电子邮件线程建议使用-header-filter(HeaderFilterRegex) 选项。

HeaderFilterRegex: '^((?!bad.hpp).)*$'
Run Code Online (Sandbox Code Playgroud)

但这会导致所有标头被忽略,因为 clang tidy使用POSIX 正则表达式语法。这不支持负面展望。

正如这个答案所建议的那样,我还考虑使用线路过滤器,但配置文件没有这样的选项。

有可能吗?

iva*_*ult 7

截至今天(2022 年 4 月 19 日),披露 llvm 博客上的此帖子表明该功能不受支持。

相关注释有:

  • HeaderFilterRegex使用 进行解析llvm::Regex,它不支持负向前瞻。
  • 目前还无法使用std::regex代替,因为某些编译器不支持。未来版本可能会实现基于 glob 的文件名过滤。llvm::Regexstd::regexclang-tidy

我现在只能看到两种可能的解决方法:

  • 列出 中所有允许的路径HeaderFilterRegex
  • 补丁clang-tidy使用std::regex并使用您自己的版本。