由于clang plugin 大家已经很熟悉,加上之前已经做过,然后简单的LibTooling 和 plugin又没有什么本质的区别,然后基于我们以后需要做的检测会很多,希望可以做到分模块管理,加上我们需要有auto fixIt 的能力,希望可以快速添加指定checker,所以此次选用全新静态分析框架:clang-tidy 来做,通过自定义module和checker来支持独立模块化检测,结合ASTMatcher精准匹配节点&提供auto fixIt 能力。
痛点
- code review时还要注意一些基本的代码规范是否正确,code review时间拉长,浪费RD时间
- code review时难免会遗漏或看错部分代码行,不能强制保持逐行review,有一定风险性
- 如何保证代码质量?如何保证出现过问题的代码case不再出现?
目标
通过clang tool运行指定module checker,用针对相应代码缺陷&规范编写的check代码,on the preprocessor level or the AST level 进行检查,并生成相应的 diagnosis 来警告或报错提示开发者,同时提供FixHint来提示或自动修复,从而减少工程中不符合规范&缺陷的代码,以缩短code review时间,保证code review效率和准确性,降低检查失败次数,提升发版成功率, 最终全面提高代码质量和工程稳健性!
大型工程化项目支持
#!/bin/bash
src="/Users/yaso/Desktop/P/yourProject/Pods/Headers/Private"
dst="/Users/yaso/Desktop/Headers"
echo $src
function read_dir(){
for file in `ls $1`;do
if [ -d $1"/"$file ];then
read_dir $1"/"$file
else
echo $1"/"$file
[ `cp $1"/"$file $dst` ]
fi
done
}
include=""
function append_include(){
for file in `ls $1`;do
if [ -d $1"/"$file ];then
row=" -extra-arg-before=-I"$1"/"$file
include=$include$row
fi
done
}
append_include $src
echo "successful!"
/Users/yaso/Desktop/clang_llvm/llvm-project/build/Debug/bin/clang-tidy \
-enable-check-profile \
-checks="objc-property-declaration, -clang-analyzer-osx.cocoa.*, -clang-diagnostic-objc-missing-super-calls" \
-warnings-as-errors="clang-analyzer-nullability.*" \
-extra-arg-before="-language=objective-c " \
-extra-arg-before "-isysroot/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator12.2.sdk" \
-extra-arg-before="-I/Users/yaso/Desktop/P/yourProject/Pods/Headers/Private" \
-extra-arg-before="-I/Users/yaso/Desktop/P/yourProject/Pods/Headers/Public" \
-extra-arg-before="-fobjc-weak" \
-extra-arg-before="-std=gnu11" \
$include \
/Users/yaso/Desktop/P/Project/Pod/Classes/Controller/*.m -- -v
网友评论