是否可以用 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::regex
。 clang-tidy
的未来版本可能会实现基于 glob 的文件名过滤。
我现在只能看到两个可能的解决方法:
- 列出
HeaderFilterRegex
中所有允许的路径。
- 修补
clang-tidy
以使用 std::regex
并使用您自己的版本。
我想包含一个来自外部项目的 header,但 clang-tidy 对此非常不满意,并产生了大量警告。为了解决这个问题,我试图禁用来自此 header.
的所有诊断我试过了:
// NOLINTBEGIN
// NOLINTNEXTLINE
#include <bad.hpp> // NOLINT
// NOLINTEND
但不幸的是,这不起作用。
此 email thread 建议使用 -header-filter
(HeaderFilterRegex) 选项。
HeaderFilterRegex: '^((?!bad.hpp).)*$'
但这会导致所有 header 被忽略,因为 clang 整洁
我还考虑过使用 line-filter 作为配置文件的 this answer suggests, but there is
有可能吗?
截至今天(2022 年 4 月 19 日),disclosure llvm blog 上的这个帖子表明该功能不受支持。
相关注释为:
HeaderFilterRegex
是使用llvm::Regex
解析的,不支持负前瞻。- 使用
std::regex
代替llvm::Regex
是不可能的,因为一些编译器不支持std::regex
。clang-tidy
的未来版本可能会实现基于 glob 的文件名过滤。
我现在只能看到两个可能的解决方法:
- 列出
HeaderFilterRegex
中所有允许的路径。 - 修补
clang-tidy
以使用std::regex
并使用您自己的版本。