clang-tidy 学习笔记1

news/2024/10/30 21:30:57/

1.什么是clang-tidy

clang-tidy is a clang-based C++ “linter” tool. 
Its purpose is to provide an extensible framework for diagnosing 
and fixing typical programming errors, like style violations, 
interface misuse, or bugs that can be deduced via static analysis. 
clang-tidy is modular and provides a convenient interface for writing 
new checks.clang-tidy 是一个基于 clang 的 C++ 静态代码检查工具。其目的是提供一个可扩展的框架,
用于诊断和修复典型的编程错误,例如样式冲突、接口误用或可通过静态分析推断出的错误。
clang-tidy是模块化的,为编写新检查提供了方便的接口。

2.安装

待补充

3.使用clang-tidy

clang-tidy is a LibTooling-based tool, and it’s easier to work with if you set up a compile command database for your project (for an example of how to do this, see How To Setup Tooling For LLVM How To Setup Clang Tooling For LLVM — Clang 20.0.0git documentation). You can also specify compilation options on the command line after --:

$clang-tidy test.cpp -- -Imy_project/include -DMY_DEFINES ...

clang-tidy has its own checks and can also run Clang Static Analyzer checks. Each check has a name and the checks to run can be chosen using the -checks= option, which specifies a comma-separated list of positive and negative (prefixed with -) globs. Positive globs add subsets of checks, and negative globs remove them. For example, 

$clang-tidy test.cpp -checks=-*,clang-analyzer-*,-clang-analyzer-cplusplus*

Note:

This will disable all default checks (-*) and enable all clang-analyzer-* checks except for clang-analyzer-cplusplus* ones. 

The -list-checks option lists all the enabled checks. When used without -checks=, it shows checks enabled by default. Use -checks=* to see all available checks or with any other value of -checks= to see which checks are enabled by this value.

There are currently the following groups of checks:

Clang diagnostics are treated in a similar way as check diagnostics. Clang diagnostics are displayed by clang-tidy and can be filtered out using the -checks= option. However, the -checks= option does not affect compilation arguments, so it cannot turn on Clang warnings which are not already turned on in the build configuration. The -warnings-as-errors= option upgrades any warnings emitted under the -checks= flag to errors (but it does not enable any checks itself).

Clang diagnostics have check names starting with clang-diagnostic-. Diagnostics which have a corresponding warning option, are named clang-diagnostic-<warning-option>, e.g. Clang warning controlled by -Wliteral-conversion will be reported with check name clang-diagnostic-literal-conversion.

The -fix flag instructs clang-tidy to fix found errors if supported by corresponding checks.

An overview of all the command-line options:

root@ubuntu:/home/muten# clang-tidy --help
USAGE: clang-tidy [options] <source0> [... <sourceN>]OPTIONS:Generic Options:--help                          - Display available options (--help-hidden for more)--help-list                     - Display list of available options (--help-list-hidden for more)--version                       - Display the version of this programclang-tidy options:--checks=<string>               - Comma-separated list of globs with optional '-'prefix. Globs are processed in order ofappearance in the list. Globs without '-'prefix add checks with matching names to theset, globs with the '-' prefix remove checkswith matching names from the set of enabledchecks. This option's value is appended to thevalue of the 'Checks' option in .clang-tidyfile, if any.--config=<string>               - Specifies a configuration in YAML/JSON format:-config="{Checks: '*',CheckOptions: {x: y}}"When the value is empty, clang-tidy willattempt to find a file named .clang-tidy foreach source file in its parent directories.--config-file=<string>          - Specify the path of .clang-tidy or custom config file:e.g. --config-file=/some/path/myTidyConfigFileThis option internally works exactly the same way as--config option after reading specified config file.Use either --config-file or --config, not both.--dump-config                   - Dumps configuration in the YAML format tostdout. This option can be used along with afile name (and '--' if the file is outside of aproject with configured compilation database).The configuration used for this file will beprinted.Use along with -checks=* to includeconfiguration of all checks.--enable-check-profile          - Enable per-check timing profiles, and print areport to stderr.--enable-module-headers-parsing - Enables preprocessor-level module header parsingfor C++20 and above, empowering specific checksto detect macro definitions within modules. Thisfeature may cause performance and parsing issuesand is therefore considered experimental.--explain-config                - For each enabled check explains, where it isenabled, i.e. in clang-tidy binary, commandline or a specific configuration file.--export-fixes=<filename>       - YAML file to store suggested fixes in. Thestored fixes can be applied to the input sourcecode with clang-apply-replacements.--extra-arg=<string>            - Additional argument to append to the compiler command line--extra-arg-before=<string>     - Additional argument to prepend to the compiler command line--fix                           - Apply suggested fixes. Without -fix-errorsclang-tidy will bail out if any compilationerrors were found.--fix-errors                    - Apply suggested fixes even if compilationerrors were found. If compiler errors haveattached fix-its, clang-tidy will apply them aswell.--fix-notes                     - If a warning has no fix, but a single fix canbe found through an associated diagnostic note,apply the fix.Specifying this flag will implicitly enable the'--fix' flag.--format-style=<string>         - Style for formatting code around applied fixes:- 'none' (default) turns off formatting- 'file' (literally 'file', not a placeholder)uses .clang-format file in the closest parentdirectory- '{ <json> }' specifies options inline, e.g.-format-style='{BasedOnStyle: llvm, IndentWidth: 8}'- 'llvm', 'google', 'webkit', 'mozilla'See clang-format documentation for the up-to-dateinformation about formatting styles and options.This option overrides the 'FormatStyle` option in.clang-tidy file, if any.--header-filter=<string>        - Regular expression matching the names of theheaders to output diagnostics from. Diagnosticsfrom the main file of each translation unit arealways displayed.Can be used together with -line-filter.This option overrides the 'HeaderFilterRegex'option in .clang-tidy file, if any.--line-filter=<string>          - List of files with line ranges to filter thewarnings. Can be used together with-header-filter. The format of the list is aJSON array of objects:[{"name":"file1.cpp","lines":[[1,3],[5,7]]},{"name":"file2.h"}]--list-checks                   - List all enabled checks and exit. Use with-checks=* to list all available checks.--load=<pluginfilename>         - Load the specified plugin-p <string>                     - Build path--quiet                         - Run clang-tidy in quiet mode. This suppressesprinting statistics about ignored warnings andwarnings treated as errors if the respectiveoptions are specified.--store-check-profile=<prefix>  - By default reports are printed in tabulatedformat to stderr. When this option is passed,these per-TU profiles are instead stored as JSON.--system-headers                - Display the errors from system headers.This option overrides the 'SystemHeaders' optionin .clang-tidy file, if any.--use-color                     - Use colors in diagnostics. If not set, colorswill be used if the terminal connected tostandard output supports colors.This option overrides the 'UseColor' option in.clang-tidy file, if any.--verify-config                 - Check the config files to ensure each check andoption is recognized.--vfsoverlay=<filename>         - Overlay the virtual filesystem described by fileover the real file system.--warnings-as-errors=<string>   - Upgrades warnings to errors. Same format as'-checks'.This option's value is appended to the value ofthe 'WarningsAsErrors' option in .clang-tidyfile, if any.-p <build-path> is used to read a compile command database.For example, it can be a CMake build directory in which a file namedcompile_commands.json exists (use -DCMAKE_EXPORT_COMPILE_COMMANDS=ONCMake option to get this output). When no build path is specified,a search for compile_commands.json will be attempted through allparent paths of the first input file . See:https://clang.llvm.org/docs/HowToSetupToolingForLLVM.html for anexample of setting up Clang Tooling on a source tree.<source0> ... specify the paths of source files. These paths arelooked up in the compile command database. If the path of a file isabsolute, it needs to point into CMake's source tree. If the path isrelative, the current working directory needs to be in the CMakesource tree and the file must be in a subdirectory of the currentworking directory. "./" prefixes in the relative files will beautomatically removed, but the rest of a relative path must be asuffix of a path in the compile command database.Configuration files:clang-tidy attempts to read configuration for each source file from a.clang-tidy file located in the closest parent directory of the sourcefile. The .clang-tidy file is specified in YAML format. If any configurationoptions have a corresponding command-line option, command-line option takesprecedence.The following configuration options may be used in a .clang-tidy file:CheckOptions                 - List of key-value pairs defining check-specificoptions. Example:CheckOptions:some-check.SomeOption: 'some value'Checks                       - Same as '--checks'. Additionally, the list ofglobs can be specified as a list instead of astring.ExtraArgs                    - Same as '--extra-args'.ExtraArgsBefore              - Same as '--extra-args-before'.FormatStyle                  - Same as '--format-style'.HeaderFileExtensions         - File extensions to consider to determine if agiven diagnostic is located in a header file.HeaderFilterRegex            - Same as '--header-filter-regex'.ImplementationFileExtensions - File extensions to consider to determine if agiven diagnostic is located in animplementation file.InheritParentConfig          - If this option is true in a config file, theconfiguration file in the parent directory(if any exists) will be taken and the currentconfig file will be applied on top of theparent one.SystemHeaders                - Same as '--system-headers'.UseColor                     - Same as '--use-color'.User                         - Specifies the name or e-mail of the userrunning clang-tidy. This option is used, forexample, to place the correct user name inTODO() comments in the relevant check.WarningsAsErrors             - Same as '--warnings-as-errors'.The effective configuration can be inspected using --dump-config:$ clang-tidy --dump-config---Checks:                       '-*,some-check'WarningsAsErrors:             ''HeaderFileExtensions:         ['', 'h','hh','hpp','hxx']ImplementationFileExtensions: ['c','cc','cpp','cxx']HeaderFilterRegex:            ''FormatStyle:                  noneInheritParentConfig:          trueUser:                         userCheckOptions:some-check.SomeOption: 'some value'...root@ubuntu:/home/muten# 

链接:

Clang-Tidy — 额外的 Clang 工具 20.0.0git 文档 --- Clang-Tidy — Extra Clang Tools 20.0.0git documentation


http://www.ppmy.cn/news/1543190.html

相关文章

基于C语言实现的TCP客户端

目录 一、TCP客户端的工作流程 二、C语言实现TCP客户端的代码示例 1. 头文件和宏定义 2. 主函数&#xff1a;连接服务器并进行通信 代码详解 三、编译与运行 1. 编译代码 2. 运行客户端 3. 示例输出 在网络编程中&#xff0c;TCP&#xff08;传输控制协议&#xff09;…

一道关于Linux hash 解密的CTF杂项题

一道关于Linux hash 解密的CTF杂项题 题目描述: 猜猜我是用什么方法重置了对方的密码?我登入对方系统使用的密码是MyPa???????? flag为密码的md5值。黑客 192.168.80.134 服务器 192.168.80.136题目文件 $ ls -al file.pcap .r--r--r-- staff staff 54 KB Wed O…

w006基于SpringBoot的网上订餐系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

官宣下代GPU存在缺陷,50系显卡或将迎来涨价

如果说 AMD 在 Ryzen 3000 系列还是和 intel 在 CPU 方面棋差一着的话&#xff0c;Ryzen 5000 系列就是打了个漂亮的翻身仗了。 凭借先进的 7nm 工艺制程和全新架构&#xff0c;让后来 intel 急忙推出「14nm」的 11 代酷睿也难以望其项背。 直到 intel 12 代发布的时候&#xf…

HTML入门教程19:HTML ID

一、ID的基本用法 定义ID&#xff1a; 在HTML元素中&#xff0c;通过在元素的开始标签内添加id属性来定义ID。ID属性的值在整个HTML文档中必须是唯一的&#xff0c;不能重复。例如&#xff1a;<p id"uniqueparagraph">这是一个带有唯一标识符的段落。</p>…

访问jenkins页面报错

安装fontconfig 即可 yum install fontconfig -y 安装完之后重启jenkins systemctl restart jenkins 再访问

SAP-ABAP开发-FUNCTION ALV 补充

一、增加表头 1、基本表头 先创建子程序&#xff0c;对表头内表进行赋值&#xff08;表头内表SLIS T LISTHEADER&#xff09;使用函数创建表头 &#xff08;REUSE_ALV_COMMENTARY_WRITE&#xff09;修改ALV调用函数向I_CALLBACK_TOP_OF_PAGE进行传值&#xff0c;传子程序名称或…

爬虫利器playwright

是什么 它是微软在 2020 年初开源的新一代自动化测试工具&#xff0c;其功能和 selenium 类似&#xff0c;都可以驱动浏览器进行各种自动化操作。还可以录制脚本 案列-01 运行之后我们用它自动打开的谷歌浏览器&#xff0c;打开百度&#xff0c;输入漂亮小姐姐并查找&#x…