Clang-tidy 插件开发
一、 下载llvm-project源码
代码块
git clone https://github.com/llvm/llvm-project.git
二、编译llvm-project
如果我们需要添加自己的check,显然就需要手动修改llvm中clang-tidy部分的代码,然后重新编译该工具。下面介绍利用llvm源码编译生成clang以及clang-tidy的整体流程
我们可以首先下载llvm-project的最新源码:(from https://github.com/llvm/llvm-project)例如,可执行git clone https://github.com/llvm/llvm-project.git
。由于网络原因,可能会下载超时失败,多试几次就好了
将分支切换到tag-16.0.6。本次开发是基于16.0.6版本
然后进入llvm-project目录,新建build目录并进入mkdir build && cd build
接下来执行:cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra" ../llvm
通过cmake来生成编译所需的Makefile,这部分选项的含义可以查询llvm-project仓库中readme文件得知
然后,执行make -j N
(分配的核心数量)来进行编译。然后就是漫长的编译时间,有条件的小伙伴尽量分配更多的内存和核心来提高编译速度以及避免因内存不足而编译失败
编译结束后,在build/bin/ 中会生成clang-tidy可执行程序,可以用用看
三、添加自定义规则
在 /llvm-project/clang-tools-extra/clang-tidy/
目录下,执行add_new_check.py
所属类别 check名字,例如 add_new_check.py objc custom-check
例如,我希望在objc分类中添加一个能够检测所有超过二级的指针声明,名为custom-check,那么我就在此目录下执行 ./add_new_check.py objc custom-check,就可以看到在objc目录下,自动生成了CustomCheck.h/cpp两个文件并填充了check的默认模板,我们只需要修改这两个文件,然后重复上文所述的编译过程,就可以用到自己的check啦