我想包含一个来自外部项目的标头,但 clang-tidy 对此非常不满意,并生成了大量警告。为了解决此问题,我正在尝试禁用来自此标头的所有诊断。
我试过了:
// NOLINTBEGIN
// NOLINTNEXTLINE
#include <bad.hpp> // NOLINT
// NOLINTEND
但不幸的是,这行不通。
此电子邮件线程建议使用-header-filter
(HeaderFilterRegex)选项。
HeaderFilterRegex: '^((?!bad.hpp).)*$'
但这会导致所有标头都被忽略,因为 clang tidy 使用 POSIX 正则表达式语法。这不支持负面的展望未来。
正如这个答案所暗示的那样,我还考虑为此使用行过滤器,但配置文件没有这样的选项。
可能吗?
截至今天(2022 年 4 月 19 日),披露 llvm 博客上的此线程表明不支持该功能。
相关说明如下:
HeaderFilterRegex
使用llvm::Regex
进行解析,不支持负前瞻。- 目前还无法使用
std::regex
而不是llvm::Regex
,因为某些编译器没有std::regex
支持。clang-tidy
的未来版本可能会实现基于 glob 的文件名筛选。
我现在只能看到两种可能的解决方法:
- 列出
HeaderFilterRegex
中允许的所有路径。 - 修补
clang-tidy
以使用std::regex
并使用您自己的版本。