是否可以用 clang-tidy 忽略 header

Is it possible to ignore a header with clang-tidy

我想包含一个来自外部项目的 header,但 clang-tidy 对此非常不满意,并产生了大量警告。为了解决这个问题,我试图禁用来自此 header.

的所有诊断

我试过了:

// NOLINTBEGIN
// NOLINTNEXTLINE
#include <bad.hpp> // NOLINT
// NOLINTEND

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

email thread 建议使用 -header-filter (HeaderFilterRegex) 选项。

HeaderFilterRegex: '^((?!bad.hpp).)*$'

但这会导致所有 header 被忽略,因为 clang 整洁 POSIX regex syntax. Which does not support 负面展望。

我还考虑过使用 line-filter 作为配置文件的 this answer suggests, but there is

有可能吗?

截至今天(2022 年 4 月 19 日),disclosure llvm blog 上的这个帖子表明该功能不受支持。

相关注释为:

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

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

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