OCLint静态分析工具的安装和使用

三豊

如今代码质量在中国的大环境不那么被重视,搞得我都曾经怀疑过自己的价值观^_^。可以对代码质量视而不见的理由太多了,譬如没时间,或是觉得对KPI没啥贡献之类的。如果你这么想了,你或许永远都数不清糟糕的代码风格给你和你的TEAM带来多少麻烦。

我们需要一个自动化的工具监控并改善代码质量,OCLint就是我们想要的,支持Objective-C/C/C++语言。小试牛刀一把,在此分享自己的经验。

官方文档提供了三种安装方式:

  • 添加到系统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的,不熟悉请移步度娘。

小提示:

  • 注意缩进,否则会报错。
  • 字符串可以用单引号包括起来,当你的字符中含有“-”等特殊符号时,这是必须的。

贴出我的配置文件:

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参数并生成报告。

我尝试了xctool,会报错,可能因为它不兼容新版xcode?于是我使用xcpretty代替:

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了。用浏览器打开看一看,是不是很漂亮~

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

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

阅读 4.6k

三豊小站
分享经验 造福码农~
8 声望
0 粉丝
0 条评论
8 声望
0 粉丝
文章目录
宣传栏