OCLint静态代码检查脚本

简介: OCLint是静态代码检查工具,用于检查代码质量

前言


OCLint是静态代码检查工具,用于检查代码质量

环境部署


网上太多类似教程,可参考OCLint在Xcode中的使用OCLint 实现 Code Review - 给你的代码提提质量

脚本


#!/bin/bash -il
source ~/.bashrc
myworkspace=OCLintProject.xcworkspace #填写workspace
myscheme=OCLintProject #填写Target
reportType=html #输出类型
reportFile=oclintReport.html #输出文件名
# clean cache
# 清除上次编译数据
if [ -d ./compile_commands.json ];
then
echo '-----清除上次编译数据-----'
rm compile_commands.json;
rm $reportFile;
fi
# clean -- build -- OCLint analyse
echo '-----开始生成编译数据-----';
xcodebuild -workspace $myworkspace -scheme $myscheme clean&&
xcodebuild -workspace $myworkspace -scheme $myscheme \
-configuration Debug -sdk iphoneos \
CLANG_ENABLE_MODULE_DEBUGGING=NO CODE_SIGNING_REQUIRED=NO ENABLE_BITCODE=NO COMPILER_INDEX_STORE_ENABLE=NO \
| xcpretty -r json-compilation-database -o compile_commands.json
if [ -f ./compile_commands.json ]
then
echo '-----编译数据生成完毕-----'
else
echo "-----生成编译数据失败-----"
return -1
fi
oclint-json-compilation-database -e Pods -e QMUI -e Libraries -- \
-report-type $reportType \
-o $reportFile \
-rc LONG_LINE=300 \
-rc LONG_METHOD=200 \
-rc LONG_VARIABLE_NAME=40 \
-rc LONG_CLASS=3000 \
-max-priority-1=10000 \
-max-priority-2=30000 \
-max-priority-3=50000 \
if [ -f ./$reportFile ]
then
echo '-----分析完毕-----'
else
echo '-----分析失败-----'
fi
  1. 首先需要用xcodebuild clean和build项目,并且添加COMPILER_INDEX_STORE_ENABLE=NO参数,不然可能会出现报错:oclint: error: one compiler command contains multiple jobs报错


xcodebuild -workspace $myworkspace -scheme $myscheme clean&&xcodebuild -workspace $myworkspace -scheme $myscheme
  1. 调用xcpretty命令分析日志信息。xcpretty是用来格式化xcodebuild输出的工具。


xcpretty -r json-compilation-database -o compile_commands.json
  1. 用oclint-json-compilation-database命令分析代码
  • -e 需要忽略分析的文件,这些文件的警告不会出现在报告中
  • -rc 需要覆盖的规则的阀值,这里可以自定义项目的阀值,默认阀值
  • -enable-rule 支持的规则,默认是oclint提供的都支持,可以组合-disable-rule来过滤掉一些规则规则列表
  • -disable-rule 需要忽略的规则,根据项目需求设置
  • -report-type 分析的报告的类型,支持[text、html、xml、json、pmd],差异可见对应Sample; 一般会选择可读性好的html或者pmd;这里我们选取pmd类型,用于结合PMD analysis生成PMD warnings,能比较友好的在Jenkins的看板中展示出来。


  1. 分析规则


名称 描述 默认阈值
CYCLOMATIC_COMPLEXITY 方法的循环复杂性(圈负责度) 10
LONG_CLASS C类或Objective-C接口,类别,协议和实现的行数 1000
LONG_LINE 一行代码的字符数 100
LONG_METHOD 方法或函数的行数 50
LONG_VARIABLE_NAME 变量名称的字符数 20
MAXIMUM_IF_LENGTH if语句的行数 15
MINIMUM_CASES_IN_SWITCH switch语句中的case数 3
NPATH_COMPLEXITY 方法的NPath复杂性 200
NCSS_METHOD 一个没有注释的方法语句数 30
NESTED_BLOCK_DEPTH 块或复合语句的深度 5
SHORT_VARIABLE_NAME 变量名称的字符数 3
TOO_MANY_FIELDS 类的字段数 20
TOO_MANY_METHODS 类的方法数 30
TOO_MANY_PARAMETERS 方法的参数数 10
更详细的默认规则可到这里查看
  1. 分析结果:


网络异常,图片无法展示
|


目录
相关文章
WKWebView 加载 http:// *** 报错WebPageProxy::didFailProvisionalLoadForFrame:
WKWebView 加载 http:// *** 报错WebPageProxy::didFailProvisionalLoadForFrame:
3336 0
|
缓存 移动开发 JavaScript
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
WKWebView对网页和js,css,png等资源文件的缓存机制及如何刷新缓存
960 1
|
前端开发
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
用html+javascript打造公文一键排版系统3:获取参数设置、公文标题排版
|
存储 开发者 iOS开发
打包生成的苹果APP上架到苹果官方appstore商店的详细流程与教程
打包生成的苹果APP上架到苹果官方appstore商店的详细流程与教程
375 0
|
JavaScript
Node.js:base62实现长数字压缩为短字符串
Node.js:base62实现长数字压缩为短字符串
589 0
|
机器学习/深度学习 开发框架 Java
别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境
在每个开发者心里,都会有一门“最好”的语言,在这个世界的某个深处,在一些矫矫不群的人们心中,这门语言的名字叫做Ruby,它今年二十八岁了,历史和Java一样的悠久,但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源,甚至于它每年都要被“死亡”一次,相比于有太阳计算机系统、甲骨文、IBM 这些大公司支持的 Java,它是那么的一无所有,但是,它又拥有全世界最虔诚的“信徒”,拥有最活跃的开发者社区,这一切,又让它是那么的应有尽有。是的,这就是Rubyist的理念:有的时候,你想证明给一万个人看,到后来,你发现只得到了一个明白的人,那就够了。
别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境
|
XML Web App开发 Java
|
XML jenkins Java
Facebook开源静态代码分析工具Infer介绍
Infer是Facebook公司的一个开源的静态分析工具。Infer 可以分析 Objective-C, Java 或者 C 代码,用于发现潜在的问题。其作用类似于sonar和fortify。Infer更倾向于发现代码中的空指针异常、资源泄露以及内存泄漏的问题。
Facebook开源静态代码分析工具Infer介绍
|
测试技术 开发工具 iOS开发
ios自动化-Xcode、WebDriverAgent环境部署(一)
环境准备: Mac电脑一台(更新到最新的macOS,此文档使用的为macOS12.3.1,Intel芯片) Xcode最新稳定版(此文档使用的为13.4.1) IOS设备 (此文档使用了10.3.3 - 15.1 均有,且都安装WebDriverAgent成功 ) 保证自己电脑有大于25G的可用内存空间,Xcode很大!
534 0
ios自动化-Xcode、WebDriverAgent环境部署(一)