问题标签 [clang-tidy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
378 浏览

c++ - 有没有办法强制对 clang-format/clang-tidy 中的类成员/方法使用“this->”?

我到处搜索,但我可能使用了错误的术语。我还没有找到这个选项。

我发现的唯一一件事是这个未回答的问题(但它有点宽泛):CPP lint:你能强制将它用于类变量吗?.

0 投票
1 回答
341 浏览

c++ - Clang tidy 用 static_cast 替换 reinterpret_cast

是否有任何规则使 clang 整洁地警告无用的 reinterpret_cast 在哪里可以使用 static_cast ?例如

0 投票
3 回答
7154 浏览

clang-tidy - 从 clang-tidy 中排除特定标头

我有几个项目有很多我想解析的标题,但是有几个我不想用 clang-tidy 解析的标题

我的文件夹层次结构如下

一个\

我的项目位于 C 和 D 文件夹中,我希望它们解析 B 下的所有标题,所以我的解决方案是 HeaderFilterRegex: 'B/*' 我想包含许多标题,所以我无法命名每个标题。

但是在 C 和 D 文件夹中,有几个我想排除的标题(例如 coco.h)。

我尝试将 NO_LINT 放在包含 coco.h 的 cpp 中,但没有帮助,

我怎样才能做到这一点?

谢谢

0 投票
1 回答
4323 浏览

c - 禁用 clang-tidy 诊断

我正在尝试设置clang-tidy在 C 项目中强制执行命名约定。该项目由多个外部源组成,并使用普通的 makefile 环境,因此没有类似的工具cmakebear可用于生成编译数据库。

这也是我想要的:使用我想clang-tidy为每个应该检查的文件选择性地调用的自定义环境。

我正在配置该工具,主要用于检查readability-identifier-naming. 为了测试,我有一个.c.h文件,都在同一个目录中,内容如下:

假人.c

假人.h

我正在调用的命令是

但是,clang-tidy仍然遵循#includeC 文件中的内容并检查现有标题:

有什么办法可以禁用它吗?clang-diagnostic-error甚至没有启用检查。或者是否有我应该知道的替代工具来强制执行命名约定?

0 投票
0 回答
56 浏览

c++ - Matching certain function declarations from existing context in clang-tidy

I would like to write a custom clang-tidy check to port code from cppunit to googletest.

I would like to be able to replace

with

I can match a function name from CPPUNIT_TEST(...) macro with

but I have no idea whether it is possible to reuse this information to match the function declaration so I can actually replace it with googletest.

0 投票
1 回答
347 浏览

clang-tidy - clang-tidy:将一些检查列入黑名单(或检查的正则表达式)

我同意大多数clang-tidy检查,但有些我看不到其中的巨大价值。主要是这些fuschia*检查,例如默认参数警告:

因此,我想知道如何运行除fuschia那些之外的所有检查。现在,我只检查 Cmake 中的所有内容:

0 投票
4 回答
5531 浏览

static-analysis - clang-tidy 或 cppcheck 等工具与 klocwork 相比如何?

这些工具之间有根本区别吗?毕竟klocwork比较贵,其他的都是免费的?两者都在遵循一些规则后进行静态代码分析。

规则的质量是否存在差异?它只取决于规则吗?你的经验是什么?

0 投票
2 回答
11045 浏览

c++ - 如何将 clang-tidy 集成到 CMake 和 GCC?

我想将 clang-tidy 集成到我们的 C 和 C++、基于 CMake 的项目中,该项目是使用自定义 GCC 工具链编译的。

我试过按照本教程设置CMAKE_CXX_CLANG_TIDY。我还尝试通过设置并指向其目录CMAKE_EXPORT_COMPILE_COMMANDS来生成编译数据库。ONrun-clang-tidy.py

在这两种情况下,我都遇到了(相同的)一些可能与 Clang 和 GCC 之间的差异有关的错误:

  1. CMake 文件中启用的一些警告标志在 Clang 中不受支持,但在 GCC 中受支持(如-Wlogical-op)。由于编译器是 GCC,文件构建正确,并且标志被写入编译数据库,但clang-tidy抱怨它。
  2. clang-tidy 抱怨一些定义和函数不可用,即使代码编译得很好。例如,建议使用android-cloexec-open 检查O_CLOEXEC来提高安全性并强制关闭文件,但尝试使用此定义会导致未定义标识符错误(即使我们的 GCC 编译代码)。作为未找到函数的示例,有clock_gettime.

我们的代码使用 C11 标准和 C++14 标准编译,没有 GNU 扩展:

自定义工具链是在 Linux 上运行并编译为 FreeBSD 的交叉编译工具链。

  1. 有没有办法禁止 CMake 将某些标志传递给 clang-tidy?我使用 clang-tidy 错了吗?
  2. 我怀疑这个问题与禁用 GNU 扩展、使用交叉编译工具链以及一些未在 Clang 中默认定义但使用 GCC 定义的功能测试宏(例如_GNU_SOURCE/ _POSIX_SOURCE)有关。如果是这种情况,我该如何检查?如果不是,我应该以不同的方式使用 clang-tidy 吗?

编辑

正如@pablo285 所问,这是我对单个文件收到的 2 个警告,然后在我添加--warnings-as-errors=*时,构建停止:

我决定编写一个 python 脚本来替换 clang-tidy,从 CMake 接收命令行并对其进行编辑以修复各种错误。以下是我尝试对命令行的修改:

  1. 删除无 clang 编译标志
    • 这有助于解决第一个警告之类的问题,因为现在我不会传递 clang 不知道的标志。似乎我无法配置 CMake 将不同的标志集传递给 GCC 和 clang-tidy,所以如果有人熟悉这个问题的一些解决方案,我会很高兴听到!
  2. 我更改了传递给 clang-tidy 的包含目录
    • 如帖子中所述,我使用自定义工具链(交叉编译)。我使用这篇文章和 Python 来提取标准包含目录的列表,并将它们作为-isystem <dir>. 我还添加了-nostdinc以便 clang-tidy 不会尝试查看他自己的标题而不是我的
      • 这有助于解决上述问题,因为现在O_CLOEXEC在工具链的标头中定义了各种定义,但是由于我的工具链基于 GCC,clang 无法解析<type_traits>包含对许多编译器内在函数的调用的标头
    • 我不确定在这种情况下最好的方法是什么

@shycha:感谢您的提示,我将尝试禁用此特定检查,然后再次编辑此帖子

0 投票
0 回答
916 浏览

c++ - 为什么 distcc 的 clang-tidy 这么慢?

在我的项目中,我能够使用 ninja 驱动 gcc 与 distcc 和 ccache 进行构建,并获得非常好的编译时间。

一旦我启用了 clang-tidy,distcc 分发一次只分发两个作业,性能显然很糟糕。

有谁知道是否存在已知问题让 clang-tidy 与 distcc 一起工作,或者这只是我遇到的一些配置问题或命令序列问题?

这是在 Ubuntu 16.04、gcc 5.4、clang-tidy 6.0、cmake 3.12.1 上运行的

编辑:

如果没有实际的命令行,问题就不清楚

(由于我的雇主,不能分享太多的实际命令,但这应该给出一个想法)

该行实际上指出问题在于命令的启动器部分的构建方式。

我们如何创建这样一个混乱的命令?嗯......这就是我们在我们的CMakeLists.txt

那么......使用这两个部分为命令部分生成合理输出的正确方法是什么--launcher?我认为的最终目标更像是--launcher="/usr/bin/distcc /usr/bin/ccache".

0 投票
1 回答
597 浏览

c++ - 如何在没有整洁警告的情况下使用工会?

Clang-tidy 的cppcoreguidelines-pro-type-union-access规则本质上是对工会的完全禁止,它标记了对工会成员的所有访问权限。

我的库有一个外部“C”接口,其结构包含一个联合。我不能在头文件中使用应该可以从 C 而不仅仅是 C++ 中使用的变体。

显然,在我使用联合的地方使用 NOLINT 向代码发送垃圾邮件并不是一个好主意。

除了禁用此检查之外,还有其他解决方法吗?