【问题标题】:Inline way to disable clang-tidy checks禁用clang-tidy检查的内联方式
【发布时间】:2016-10-23 08:34:07
【问题描述】:

我正在尝试为一个项目设置 clang-tidy。我希望能够获得干净的输出,并鼓励在可能的情况下使用 -fix 模式。但是,在个别情况下需要例外。

尽可能多地使用

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wreserved-id-macro"
// Code that is being specially exempted
#pragma clang diagnostic pop

对于想要在本地禁用编译器警告的等效情况,是否可以从 clang-tidy 做类似的事情?

我试过了

#pragma clang diagnostic push
#pragma clang diagnostic ignored "readability-identifier-naming"
// Code that is being specially exempted
#pragma clang diagnostic pop

也将clang 替换为clang-tidy。不幸的是,当使用 clang 作为 pragma 目标并使用常规 clang 编译时,我收到编译警告

warning: pragma diagnostic expected option name (e.g. "-Wundef") [-Wunknown-pragmas]

warning: unknown pragma ignored [clang-diagnostic-unknown-pragmas]

如果我在编译时使用clang-tidy 代替clang。在源代码上运行时,两者都不会影响 clang-tidy 本身的输出。

这适用于 x86_64 Linux 上的 clangclang-tidy 3.8。

【问题讨论】:

    标签: c++ clang++ clang-tidy


    【解决方案1】:

    只需在您希望 clang-tidy 忽略的行的任意位置添加一个包含字符串 NOLINT 的注释。例如:

    badcode;  // NOLINT
    
    // NOLINTNEXTLINE
    badcode;
    
    badcode; // NOLINT(cert-err-58-cpp)
    

    请参阅文档here

    【讨论】:

    • 事实上,似乎在 // NOLINT 之后通过(将它们放在括号中)选择退出特定检查现在是在 2017 年 12 月左右添加的一个功能。
    • 为@RichL 的良好提示提供一个示例:badcode; // NOLINT(cert-err58-cpp)。这将仅禁用“cert-err58-cpp”警告并且仅针对这一行(例如“cert-err111-cpp”仍可能被抛出)。确保 NOLINT 和 (. 之间没有空格
    猜你喜欢
    • 2020-04-08
    • 2018-07-02
    • 2016-02-18
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多