深入研究Clang(十四) clang-tidy的使用
Posted snsn1984
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入研究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之中也有这个规则的一部分细分:
以上是关于深入研究Clang(十四) clang-tidy的使用的主要内容,如果未能解决你的问题,请参考以下文章
C++Clang-Tidy提示:“Clang-Tidy: Potential uncovered code path; add a default label”的解决方案