问题标签 [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.
c++ - 有没有办法强制对 clang-format/clang-tidy 中的类成员/方法使用“this->”?
我到处搜索,但我可能使用了错误的术语。我还没有找到这个选项。
我发现的唯一一件事是这个未回答的问题(但它有点宽泛):CPP lint:你能强制将它用于类变量吗?.
c++ - Clang tidy 用 static_cast 替换 reinterpret_cast
是否有任何规则使 clang 整洁地警告无用的 reinterpret_cast 在哪里可以使用 static_cast ?例如
clang-tidy - 从 clang-tidy 中排除特定标头
我有几个项目有很多我想解析的标题,但是有几个我不想用 clang-tidy 解析的标题
我的文件夹层次结构如下
一个\
我的项目位于 C 和 D 文件夹中,我希望它们解析 B 下的所有标题,所以我的解决方案是 HeaderFilterRegex: 'B/*' 我想包含许多标题,所以我无法命名每个标题。
但是在 C 和 D 文件夹中,有几个我想排除的标题(例如 coco.h)。
我尝试将 NO_LINT 放在包含 coco.h 的 cpp 中,但没有帮助,
我怎样才能做到这一点?
谢谢
c - 禁用 clang-tidy 诊断
我正在尝试设置clang-tidy
在 C 项目中强制执行命名约定。该项目由多个外部源组成,并使用普通的 makefile 环境,因此没有类似的工具cmake
或bear
可用于生成编译数据库。
这也是我想要的:使用我想clang-tidy
为每个应该检查的文件选择性地调用的自定义环境。
我正在配置该工具,主要用于检查readability-identifier-naming
. 为了测试,我有一个.c
和.h
文件,都在同一个目录中,内容如下:
假人.c
假人.h
我正在调用的命令是
但是,clang-tidy
仍然遵循#include
C 文件中的内容并检查现有标题:
有什么办法可以禁用它吗?clang-diagnostic-error
甚至没有启用检查。或者是否有我应该知道的替代工具来强制执行命名约定?
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
.
clang-tidy - clang-tidy:将一些检查列入黑名单(或检查的正则表达式)
我同意大多数clang-tidy
检查,但有些我看不到其中的巨大价值。主要是这些fuschia*
检查,例如默认参数警告:
因此,我想知道如何运行除fuschia
那些之外的所有检查。现在,我只检查 Cmake 中的所有内容:
static-analysis - clang-tidy 或 cppcheck 等工具与 klocwork 相比如何?
这些工具之间有根本区别吗?毕竟klocwork比较贵,其他的都是免费的?两者都在遵循一些规则后进行静态代码分析。
规则的质量是否存在差异?它只取决于规则吗?你的经验是什么?
c++ - 如何将 clang-tidy 集成到 CMake 和 GCC?
我想将 clang-tidy 集成到我们的 C 和 C++、基于 CMake 的项目中,该项目是使用自定义 GCC 工具链编译的。
我试过按照本教程设置CMAKE_CXX_CLANG_TIDY
。我还尝试通过设置并指向其目录CMAKE_EXPORT_COMPILE_COMMANDS
来生成编译数据库。ON
run-clang-tidy.py
在这两种情况下,我都遇到了(相同的)一些可能与 Clang 和 GCC 之间的差异有关的错误:
- CMake 文件中启用的一些警告标志在 Clang 中不受支持,但在 GCC 中受支持(如
-Wlogical-op
)。由于编译器是 GCC,文件构建正确,并且标志被写入编译数据库,但clang-tidy
抱怨它。 - clang-tidy 抱怨一些定义和函数不可用,即使代码编译得很好。例如,建议使用android-cloexec-open 检查
O_CLOEXEC
来提高安全性并强制关闭文件,但尝试使用此定义会导致未定义标识符错误(即使我们的 GCC 编译代码)。作为未找到函数的示例,有clock_gettime
.
我们的代码使用 C11 标准和 C++14 标准编译,没有 GNU 扩展:
自定义工具链是在 Linux 上运行并编译为 FreeBSD 的交叉编译工具链。
- 有没有办法禁止 CMake 将某些标志传递给 clang-tidy?我使用 clang-tidy 错了吗?
- 我怀疑这个问题与禁用 GNU 扩展、使用交叉编译工具链以及一些未在 Clang 中默认定义但使用 GCC 定义的功能测试宏(例如
_GNU_SOURCE
/_POSIX_SOURCE
)有关。如果是这种情况,我该如何检查?如果不是,我应该以不同的方式使用 clang-tidy 吗?
编辑
正如@pablo285 所问,这是我对单个文件收到的 2 个警告,然后在我添加--warnings-as-errors=*
时,构建停止:
我决定编写一个 python 脚本来替换 clang-tidy,从 CMake 接收命令行并对其进行编辑以修复各种错误。以下是我尝试对命令行的修改:
- 删除无 clang 编译标志
- 这有助于解决第一个警告之类的问题,因为现在我不会传递 clang 不知道的标志。似乎我无法配置 CMake 将不同的标志集传递给 GCC 和 clang-tidy,所以如果有人熟悉这个问题的一些解决方案,我会很高兴听到!
- 我更改了传递给 clang-tidy 的包含目录
- 如帖子中所述,我使用自定义工具链(交叉编译)。我使用这篇文章和 Python 来提取标准包含目录的列表,并将它们作为
-isystem <dir>
. 我还添加了-nostdinc
以便 clang-tidy 不会尝试查看他自己的标题而不是我的- 这有助于解决上述问题,因为现在
O_CLOEXEC
在工具链的标头中定义了各种定义,但是由于我的工具链基于 GCC,clang 无法解析<type_traits>
包含对许多编译器内在函数的调用的标头
- 这有助于解决上述问题,因为现在
- 我不确定在这种情况下最好的方法是什么
- 如帖子中所述,我使用自定义工具链(交叉编译)。我使用这篇文章和 Python 来提取标准包含目录的列表,并将它们作为
@shycha:感谢您的提示,我将尝试禁用此特定检查,然后再次编辑此帖子
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"
.
c++ - 如何在没有整洁警告的情况下使用工会?
Clang-tidy 的cppcoreguidelines-pro-type-union-access规则本质上是对工会的完全禁止,它标记了对工会成员的所有访问权限。
我的库有一个外部“C”接口,其结构包含一个联合。我不能在头文件中使用应该可以从 C 而不仅仅是 C++ 中使用的变体。
显然,在我使用联合的地方使用 NOLINT 向代码发送垃圾邮件并不是一个好主意。
除了禁用此检查之外,还有其他解决方法吗?