OCLint靜態分析工具的安裝和使用

現在代碼質量在中國的大環境不那麼被重視,搞得我都曾經懷疑過本身的價值觀^_^。能夠對代碼質量視而不見的理由太多了,譬如沒時間,或是以爲對KPI沒啥貢獻之類的。若是你這麼想了,你或許永遠都數不清糟糕的代碼風格給你和你的TEAM帶來多少麻煩。html

咱們須要一個自動化的工具監控並改善代碼質量,OCLint就是咱們想要的,支持Objective-C/C/C++語言。小試牛刀一把,在此分享本身的經驗。json

官方文檔提供了三種安裝方式:xcode

  • 添加到系統PATH
  • 使用HomeBrew
  • 直接拷貝文件到系統路徑

我試過第一種,會報「找不到任何規則」的錯誤,不太推薦。HomeBrew安裝可能走一半就失敗,不想折騰的話就直接拷文件吧(也能夠創建軟連接)。我直接貼出官方文檔的命令:瀏覽器

cp bin/oclint* /usr/local/bin/
cp -rp lib/* /usr/local/lib/
cp -rp include/* /usr/local/include/

如今,咱們須要一個配置文件來指定OCLint的規則和輸出格式。最簡單的方式是在你的項目根目錄下新建一個.oclint文件,這樣你的配置只會做用於本身的項目。OCLint的配置是基於YAML的,不熟悉請移步度娘。編輯器

小提示:工具

  • 注意縮進,不然會報錯。
  • 字符串能夠用單引號包括起來,當你的字符中含有「-」等特殊符號時,這是必須的。

貼出個人配置文件:ui

disable-rules:
- LongLine
rule-configurations:
- key: CYCLOMATIC_COMPLEXITY
  value: 15
- key: NPATH_COMPLEXITY
  value: 300
output: output.html
report-type: html
max-priority-1: 20
max-priority-2: 40
max-priority-3: 60
enable-clang-static-analyzer: true

oclint命令須要傳遞clang編譯參數。咱們使用xcodebuild來編譯項目,其實會向clang傳遞數量龐大的編譯參數,不可能手動傳遞。雖然使用oclint時編譯項目不是必須的,但咱們須要經過xcodebuild命令配合xcpretty/xctool在編譯時輸出參數到json文件,而後使用oclint-json-compilation-database命令讀取json參數並生成報告。spa

我嘗試了xctool,會報錯,可能由於它不兼容新版xcode?因而我使用xcpretty代替:code

xcodebuild \
    -workspace test.xcworkspace \
    -scheme test \
    -configuration DEBUG \ 
    clean build | \
    xcpretty -r json-compilation-database -o compile_commands.json
oclint-json-compilation-database

執行完畢後,檢查一下compile_commands.json文件中是否有json內容輸出?在項目目錄中就能夠找到output.html了。用瀏覽器打開看一看,是否是很漂亮~xml

report-type還能夠指定爲xml、text、xcode等,能夠動手試一試。

PS:以前趟過一個坑,cleanbuild要寫在一行。若是分爲兩行寫(官方的教程就是如此),好比這樣:

xcodebuild clean
xcodebuild build

在終端執行彷佛沒問題,在XCode中以編譯腳本的方式執行會發現輸出內容比較少(也許和XCode版本有關係),compile_commands.json中內容是空的。後續oclint-json-compilation-database命令會缺乏參數報錯。糾結了好久,你們引覺得戒~

OCLint還支持集成到XCode,這樣咱們就能夠在編輯器裏以warning的形式查看OCLint的建議,比較直觀。

創建一個Aggregate目標:
圖片描述

而後在Build Phases中新建一段腳本:

xcodebuild -workspace test.xcworkspace -scheme test -configuration DEBUG clean build | \
xcpretty -r json-compilation-database -o compile_commands.json
oclint-json-compilation-database -- -report-type=xcode -o '-'

oclint-json-compilation-database命令支持帶oclint參數(參考oclint -help),跟在--後面。咱們能夠在這裏覆蓋.oclint配置中的內容。這裏咱們覆蓋了兩個配置:

  1. 指定輸出類型爲xcode。
  2. 指定輸出文件名爲-,意思是輸出到stdout,不然會看不到提示。

而後咱們運行項目,大功告成~
圖片描述

相關文章
相關標籤/搜索