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,不然会看不到提示。

而后咱们运行项目,大功告成~
图片描述

相关文章
相关标签/搜索