首页 > 解决方案 > 如何从 clang-tidy 文件中排除单个检查?

问题描述

让我们谈谈这个简单的例子:

#include <iostream>

int main(int argc, char *argv[])
{
  std::cout << "started " << argv[0] << " with " << argc << " params." << std::endl;
  return 0;
}

我们有一个最小的.clang-tidy文件,如下所示:

Checks:
    '-*,
    cppcoreguidelines-*,
    -cppcoreguidelines-pro-bounds-pointer-arithmetic'

WarningsAsErrors:
    '*'

即使我收到以下警告:

src/main.cpp:5:30: error: do not use pointer arithmetic [cppcoreguidelines-pro-bounds-pointer-arithmetic,-warnings-as-errors]
  std::cout << "started " << argv[0] << " with " << argc << " params." << std::endl;
                             ^

我不想NOLINT在我的代码中乱七八糟,也不想CMakeLists.txt仅仅因为clang-tidy.

有没有一种干净的方法来掩盖.clang-tidy文件中的一些单一检查?

我在 Linux 的 6.0.0 版本中使用 gcc/g++ 和 clang-tidy。我知道如何禁用铿锵整洁的检查?- 但它没有回答我的问题,而且重复的链接完全是错误的。

标签: c++clang-tidy

解决方案


就我而言,我认为问题与全局扩展顺序有关。最初,Checks我的行.clang-tidy是这样的:

Checks: 'clang-diagnostic-*,clang-analyzer-*,*'

我想禁用altera-unroll-loops诊断。修复方法是在最后偷偷摸摸的 glob-all 之后添加它:

Checks: 'clang-diagnostic-*,clang-analyzer-*,*,-altera-unroll-loops'

最初,我将它放在 之前*,我认为这导致它被覆盖。我也没有问题,它被分成多行,就像你上面所说的那样。


推荐阅读