Code Review
代碼評(píng)審逆趋,代碼靜態(tài)檢查欢际,Objective-C代碼靜態(tài)檢查工具——OCLint
Github: https://github.com/bobwongs/BWCodeReview
Contents
- Overview
- OCLint
- 給Xcode項(xiàng)目集成OCLint
- 1会钝、安裝
- 2、配置
- 3揩抡、靜態(tài)代碼分析
- OCLint已有規(guī)則的自定義
- 給Xcode項(xiàng)目集成OCLint
- Summary
- Next
- Reference
- Follow Me
Overview
- 編寫(xiě)符合項(xiàng)目團(tuán)隊(duì)規(guī)范的代碼
- 檢查和提高項(xiàng)目代碼質(zhì)量
- 提高項(xiàng)目的可維護(hù)性
- 彌補(bǔ)由Xcode原本的代碼檢查所不能檢查到的問(wèn)題代碼的不足簇爆,讓代碼保持更高質(zhì)量
OCLint
對(duì)C、C++视译、Objective-C進(jìn)行靜態(tài)代碼檢查的工具
給Xcode項(xiàng)目集成OCLint
1嬉荆、安裝
必要的工具:OCLint、xcpretty(美化xcodebuild的命令行輸出日志工具)
選擇性安裝:Homebrew(The missing package manager for macOS酷含,Mac OS的包管理器鄙早,可以便捷地安裝很多常用的工具)
資源下載地址
OCLint:https://github.com/oclint/oclint/releases汪茧,選擇最新的版本進(jìn)行下載
xcpretty:https://github.com/supermarin/xcpretty,安裝命令:gem install xcpretty限番,首先要安裝有g(shù)em
Homebrew:https://brew.sh/舱污,安裝命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
OCLint的安裝
Reference:http://docs.oclint.org/en/stable/intro/installation.html
1、解壓OCLint安裝包弥虐,打開(kāi)終端扩灯,切換到解壓出來(lái)的OCLint安裝包目錄
2、執(zhí)行腳本
OCLINT_HOME=/path/to/oclint-release
export PATH=$OCLINT_HOME/bin:$PATH
cp bin/oclint* /usr/local/bin/
cp -rp lib/* /usr/local/lib/
3霜瘪、安裝結(jié)果的驗(yàn)證珠插,終端輸入oclint,輸出如下結(jié)果為安裝成功
$ oclint
oclint: Not enough positional command line arguments specified!
Must specify at least 1 positional arguments: See: oclint -help
另外颖对,也可以用Homebrew進(jìn)行安裝和更新
安裝
brew tap oclint/formulae
brew install oclint
更新
brew update
brew upgrade oclint
2丧失、配置
在項(xiàng)目根目錄下創(chuàng)建用于分析的Shell腳本文件analysis.sh
以下為analysis.sh文件內(nèi)的腳本
# 移除原有的生成文件
xcodebuild clean | xcpretty
rm -r build
rm -r compile_commands.json
# Build和把日志寫(xiě)到目標(biāo)文件
xcodebuild | xcpretty -r json-compilation-database --output compile_commands.json
Reference
http://docs.oclint.org/en/stable/guide/xcode.html
https://gist.github.com/ryuichis/755e6297aec13c900cdf
Xcode -> Build Phases -> New Run Script Phase -> Run Script,配置生成代碼不規(guī)范相關(guān)警告的Shell腳本
oclint-json-compilation-database -- -report-type xcode
說(shuō)明:如果要在項(xiàng)目源碼中進(jìn)行代碼檢查惜互,那么在檢查的時(shí)候才開(kāi)啟上述Xcode里面配置的腳本,不需要進(jìn)行檢查琳拭,打包測(cè)試训堆,提交到Git上的時(shí)候記得把檢查腳本注釋掉,不然在Build之前都會(huì)先執(zhí)行分析腳本白嘁,看具體情況對(duì)這段代碼進(jìn)行注釋或者開(kāi)啟
3坑鱼、靜態(tài)代碼分析
在命令行切換到項(xiàng)目根目錄,運(yùn)行analysis.sh絮缅,生成build目錄和用于生成警告的compile_commands.json文件
如果項(xiàng)目中有.xcworkspace鲁沥,則在使用xcodebuild命令,沒(méi)有指定相應(yīng)的參數(shù)時(shí)是會(huì)失敗的耕魄,但是沒(méi)關(guān)系画恰,只要能確保命令行的輸出里面看到有compile的字眼就OK,因?yàn)镺CLint的原理就是從compile的源文件中去檢查的
如下圖所示吸奴,即使是Build Failed允扇,也是沒(méi)問(wèn)題的,也同樣能生成供OCLint進(jìn)行靜態(tài)代碼檢查的文件
對(duì)Xcode項(xiàng)目進(jìn)行Command+B操作则奥,等oclint命令對(duì)compile_commands.json文件分析完成考润,就能查看到由于編碼不規(guī)范生成的警告
OCLint已有規(guī)則的自定義
Reference
OCLint查看幫助命令:oclint -help
OCLint代碼靜態(tài)檢查規(guī)則的查看命令:oclint rt -list-enabled-rules
OCLint configuration file:http://docs.oclint.org/en/stable/howto/rcfile.html
Project Configuration File
僅針對(duì)單個(gè)項(xiàng)目的已有規(guī)則的自定義,在項(xiàng)目根目錄下創(chuàng)建.oclint文件读处,可以使用Shell命令快速創(chuàng)建
touch .oclint # 創(chuàng)建.oclint文件
.oclint文件自定義已有規(guī)則
示例一
關(guān)閉已有的一些檢查規(guī)則
查看已有檢查規(guī)則的命令:oclint rt -list-enabled-rules
disable-rules:
- LongLine
- LongVariableName
- UnusedMethodParameter
示例二
自定義已有規(guī)則的限值糊治,例如單行字?jǐn)?shù)的上限
Reference:http://docs.oclint.org/en/stable/howto/thresholds.html
disable-rules:
- LongLine
rulePaths:
- /etc/rules
rule-configurations:
- key: CYCLOMATIC_COMPLEXITY
value: 15
- key: LONG_LINE
value: 200
output: oclint.xml
report-type: xml
max-priority-1: 20
max-priority-2: 40
max-priority-3: 60
enable-clang-static-analyzer: false
Summary
- 對(duì)項(xiàng)目代碼質(zhì)量進(jìn)行周期性檢查
- 及時(shí)修改不符合規(guī)范的代碼
- 讓項(xiàng)目問(wèn)題杜絕在代碼編寫(xiě)的層面
Next
- 自定義OCLint的檢查規(guī)則
- Code Review的規(guī)范
- Objective-C編碼規(guī)范
- Swift編碼規(guī)范
Reference
OCLint
- http://oclint.org/
- http://docs.oclint.org/en/stable/
- http://docs.oclint.org/en/stable/guide/xcode.html
Follow Me
Github: https://github.com/bobwongs
Sina: http://weibo.com/bobwongs
歡迎打賞!