深入研究Clang(十四) clang-tidy的使用

前文对clang-tidy进行了简单的介绍,本文对clang-tidy使用中的一些点进行一下总结。

1、clang-tidy及其批量运行脚本run-clang-tidy.py在Clang/LLVM的预编译发布包中都有,但是位于不同的目录。其中,clang-tidy位于:发布包主目录/bin目录之下;run-clang-tidy.py位于:发布包主目录/shared/clang/目录之下。

例如:

以clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04发布包为例,clang-tidy位于:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy;run-clang-tidy.py位于:clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/share/clang/run-clang-tidy.py。

2、run-clang-tidy.py与clang-tidy的运行,都依赖于compile_commands.json。同时,这两者都可以通过“-checks=”来设定检查规则。或者不使用“-checks=”选项,而在项目主目录之下添加.clang-tidy文件,在里面编写项目的检查规则,这种方式更加适合对整个项目进行定制化的规则编写。.clang-tidy文件并不是必须放在主目录之下,只是通常放在主目录之下方便对整个项目进行检查。

例如:

这是clang的主目录下的.clang-tidy:

3、run-clang-tidy.py的运行,不但依赖于clang-tidy,同时也依赖于clang-apply-replacements。clang-apply-replacements和clang-tidy在同一个目录。

run-clang-tidy.py开头的注释中,写明了:” Runs clang-tidy over all files in a compilation database. Requires clang-tidy and clang-apply-replacements in $PATH.“

4、因为run-clang-tidy.py在预编译发布包里和clang-tidy、clang-apply-replacements不在同一个目录,在运行时可以通过指定run-clang-tidy.py的“-clang-tidy-binary=”和“-clang-apply-replacements-binary=”两个选项,来确定clang-tidy、clang-apply-replacements的路径。

例如:

项目主目录之下存在了.clang-tidy和compile_commands.json文件,同时预编译发布包clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04也在主目录之下,那么在主目录之下运行如下命令可以对整个项目进行检查:

./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/share/clang/run-clang-tidy.py -clang-tidy-binary='./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-tidy' -clang-apply-replacements-binary='./clang+llvm-8.0.0-x86_64-linux-gnu-ubuntu-16.04/bin/clang-apply-replacements' ./

5、clang-tidy的检查规则编写的时候,规则名称前面带有“-”的是让该规则失效,规则名称直接写的是要使用该规则。

例如:

clang的主目录之下的.clang-tidy文件中的规则:

Checks: '-*,clang-diagnostic-*,llvm-*,misc-*,-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-readability-identifier-naming'

这里的“-*”就是要使目前所有的规则失效,“clang-diagnostic-*,llvm-*,misc-*”是要让clang-diagnostic-、llvm-、misc-开头的规则可用,“-misc-unused-parameters,-misc-non-private-member-variables-in-classes,-readability-identifier-naming”是让这具体的三个规则失效。

6、clang-tidy的检查清单的官方文档位于:Extra Clang Tools 11 documentation。其中,有些规则是可以进一步对其子规则进行设置的。

例如:

规则readability-identifier-naming,就可以进一步细分。其细分文档位于:clang-tidy - readability-identifier-naming

clang的.clang-tidy之中也有这个规则的一部分细分:

 

 

 

 

 

©️2020 CSDN 皮肤主题: 技术工厂 设计师:CSDN官方博客 返回首页