问题标签 [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 投票
4 回答
13672 浏览

cmake - cmake clang-tidy (或其他脚本)作为自定义目标

我正在尝试为 clang-tidy 创建一个自定义 cmake 目标,以整理我的项目。源文件夹如下所示:

到目前为止,我的计划是使用自定义命令将这两个文件复制到构建目录:

我现在想run-clang-tidy.py使用自定义目标调用构建目录(应该是工作目录),这样我就可以调用:

哪个应该运行.clang-tidy.

要使此脚本正常工作,它还需要该CMAKE_EXPORT_COMPILE_COMMANDS选项。我尝试使用以下命令设置它,但它无法识别它:

电话add_custom_target会是什么样子?

0 投票
2 回答
4997 浏览

clang - 如何启用 clang-tidy 的“现代化”检查?

我刚刚安装了ClangOnWin,我正试图让clang-tidy“现代化”检查工作。不幸的是,clang-tidy似乎并不了解它们:clang-tidy -list-checks foo.cpp -- | grep modernize不产生任何输出。

这里列出了“现代化”检查,但该页面似乎记录了 Clang 3.8,而我安装的版本是 3.7。但是,3.7 版是LLVM 下载页面中列出的当前版本。

clang-tidy知道各种安全检查,所以我认为我已经正确安装了它。例如,clang-tidy -list-checks foo.cpp -- | grep security产生这个:

我需要做一些特别的事情来启用和等检查modernize-use-overridemodernize-use-nullptr

0 投票
3 回答
19415 浏览

c++ - 让 clang-tidy 修复头文件

我正在将当前使用 gcc 编译的项目移动到 clang,并且有一堆 gcc 没有生成的警告(-Winconsistent-missing-override)。clang-tidy用于修复文件中的这些错误*.cpp,但它不会触及hpp文件,因为在数据库中找不到编译命令(如我所料)。

ninja用来构建项目并ninja -t compdb cc cxx > .build/compile_commands.json生成编译数据库。我试过运行:

修复错误。它拒绝触摸头文件抱怨:

0 投票
1 回答
26651 浏览

c++ - 禁用clang-tidy检查的内联方式

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

尽可能使用

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

我试过了

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

编译时如果我使用clang-tidy代替clang. 当在源上运行时,它们都不会对clang-tidy自身输出的内容产生影响。

这是x86_64 Linux 上的clangand 3.8。clang-tidy

0 投票
3 回答
18466 浏览

c++ - Clang-Tidy 找不到我的头文件

新来的铿锵和铿锵整洁在这里。

我有一个具有这种结构的项目: project/ - build/ - cmake/ - component1/ - src/ - someFile.cpp - someFile2.cpp - someFile.hpp - someFile2.hpp - component2/ - etc... -

当我使用 clang-tidy 通过project/component1/此命令浏览所有文件时:clang-tidy project/component1/src/* -checks=-*,clang-analyzer-*,-clang-analyzer-alpha*

它最终会抛出这样的错误: $HOME/project/component1/src/someFile.cpp:18:10: error: 'project/component1/someFile.hpp' file not found [clang-diagnostic-error] \#include "component1/someFile.hpp"

0 投票
4 回答
18531 浏览

suppress-warnings - clang-tidy:如何抑制警告?

我最近开始尝试使用clang-tidyllvm 工具。现在我试图抑制来自第三方库代码的错误警告。为此,我想使用命令行选项

-header-filter=<string>或者-line-filter=<string>

但到目前为止没有成功。因此,对于时间有限的人,我会将问题放在开头,稍后再解释我已经尝试过的内容。

问题

我需要为该clang-tidy工具提供什么选项来禁止来自某个行和文件的警告?

如果这是不可能的

什么选项可以抑制来自外部头文件的警告?


到目前为止我做了什么

我最初对 clang-tidy 的调用看起来像这样

我想抑制的产生的警告的第一行看起来像这样

gmock 的人告诉我,这是一个误报,所以我想压制它。首先,我尝试使用该-line-filter=<string>选项。文档说:

我假设给定行中的警告被过滤掉了。但是文档并没有说明它们是被过滤掉还是被过滤掉。经过一番摆弄后,我创建了一个包含内容的 .json 文件

并将命令行修改为

它将文件的内容写入参数。这会抑制警告,但不仅会抑制此警告,还会抑制 ModuleListsFileManipulator_fixtures.cpp 文件中的所有警告。我尝试了更多的东西,但我无法让它发挥作用。

所以我尝试了这个-header-filter=<string>选项。此处文档指出,必须提供一个正则表达式,该表达式与应显示诊断的所有头文件匹配。好的,我想,让我们使用一个正则表达式来匹配与分析的 .cpp 文件位于同一文件夹中的所有内容。我可以忍受这一点,尽管它可能会删除因我使用错误的外部标头而导致的警告。

在这里,我不确定正则表达式是必须匹配完整(绝对)文件名还是文件名的一部分。我试过了

它匹配 CodeAssistant 文件夹中的所有绝对头文件名,但它没有抑制来自 gmock-spec-builders.h 文件的警告。

所以最好我想单独抑制每个警告,这样我就可以确定每个警告是否是一个真正的问题,但如果这不可能,我也可以忍受来自整个外部标题的抑制警告。

感谢您的时间。

0 投票
2 回答
4833 浏览

cmake - 如何指定与 CMAKE_CXX_CLANG_TIDY 变量一起使用的其他参数

我正在尝试使用与cmake的clang-tidy集成,我想通过这个论点。我在调用 cmake 时尝试添加,但我的 makefile 命令最终看起来像:-check-DCMAKE_CXX_CLANG_TIDY="/usr/local/opt/llvm38/bin/clang-tidy-3.8;-checks=*"

/usr/local/Cellar/cmake/3.6.2/bin/cmake -E __run_iwyu --tidy="/usr/local/opt/llvm38/bin/clang-tidy-3.8;-checks=*" --source=/Users/ellery/work/.....

换句话说,它看起来像 ; 分离的 args 不会被分开解析。我还尝试CXX_CLANG_TIDY使用相同的值直接在我的目标上设置目标属性,我得到了相同的行为。

clang-tidy有没有人通过 cmake成功调用了额外的参数?

0 投票
2 回答
1917 浏览

qt - 沉默铿锵

我有一个通过 cmake 使用 clang-tidy 的构建:

在构建它时,我在 Qt 库中遇到了可能的内存泄漏:

我怎样才能让这个静音?

我已经尝试过的:

  1. 在 a.cpp:33 末尾添加 a // NOLINT-> 无效
  2. 在 qobject.h:242 的末尾添加 a // NOLINT-> 无效
  3. 将 qobject.h:242 包裹在一个#ifndef __clang_analyzer__-> 没有效果
  4. 将所有 qobject.h 包裹在一个#ifndef __clang_analyzer__-> 没有效果
  5. 添加// NOLINT到 connectImpl 的所有行 -> clang-tidy crashs

@Tarod:这是我目前拥有的:

0 投票
2 回答
749 浏览

boost - 使用 clang-tidy 处理大量与 boost 单元测试相关的警告

我正在建立一个项目。我使用 boost 单元测试进行了骨架测试。不幸的是,宏扩展会产生大量警告。有没有办法禁用这些,而不必指定单独的行号?

即使我有 // NOLINT,也会发生这种情况。

一个例子:

0 投票
3 回答
8051 浏览

c++ - 如何在 Visual Studio 中使用 clang-tidy 现代化

我正在尝试从 Visual Studio 中或从命令行对文件应用 clang 现代化,利用我的 Visual Studio 2015 C++ 项目中的包含路径和设置。

我创建了一个整洁的设置文件,如下所示:

并验证它是否适用于(cygwin)命令行的单个文件:clang-tidy.exe -explain-config列表(除其他外)

可以通过手动设置包含在单个文件上运行它: clang-tidy.exe someFile.cpp -- -Ic:/abc -I. -IIncludes

我安装了 Visual Studio clang-format VS 插件,并创建了一个示例 .clang-format 文件,{ BasedOnStyle: "LLVM", IndentWidth: 20 }该文件VS 插件获取。然后我天真地尝试使用 clang-tidy 配置来提供 clang-format,但不出所料,这根本不起作用。

总结一下:如何在文件和 Visual Studio 项目上运行 clang-tidy?

也许一种解决方法是从 Visual Studio 中转储每个文件的包含?任何前进的方式都可以。

以供参考:

如何启用 clang-tidy 的“现代化”检查?

如何为 Visual Studio Clang-Format 插件提供 clang 格式文件?