OCLint的使用

作者: Demonboy | 来源:发表于2018-04-04 11:06 被阅读13次

    OCLint

    1. OCLint 是基于 Clang 的静态分析工具,支持对 C、C++ 和 Objective-C 代码进行静态分析,它基于 Clang 输出的抽象语法树对代码进行静态分析,支持与现有的 CI 集成,部署之后基本不需要维护,简单方便。

    安装

    1. 安装之前先看自己的电脑里有没有homebrew,那么问题来了,什么是homebrew
      Homebrew : 一款Mac OS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。

    安装OCLint

    • 三种安装方式:
    1.下载二进制包,将 bin 目录添加到 PATH 下(.bashrc 或 .bash_profile)
     OCLINT_HOME=/path/to/oclint-release
            export PATH=$OCLINT_HOME/bin:$PATH</pre>
    
    2.拷贝 OCLint 至系统 PATH

    直接将二进制拷贝到 PATH 路径下,比如拷贝到 /usr/local/bin,/usr/bin,/bin 目录。这里以 /usr/local/bin 目录为例:

            1. cp bin/oclint* /usr/local/bin/
            2. cp -rp lib/* /usr/local/lib/
    
    3.Homebrew 安装
    • 推荐使用brew安装
    $ brew tap oclint/formulae
    $ brew install oclint
    

    ​ 更新OCLint

    $ brew update
    $ brew upgrade oclint
    

    安装好后在终端中输入 oclint 验证是否成功安装,如出现如下提示说明已安装成功:

    $ oclint
    oclint: Not enough positional command line arguments specified!
    Must specify at least 1 positional arguments: See: oclint -help
    

    由于oclint-xcodebuild不在更新, 需要用xcpretty:
    gem install xcpretty

    oclint指令

    oclint [options] <source> -- [compiler flags]

    [options]为一些参数选项,可以是规则加载选项、报告形式选项等:

    1. -R <路径> : 检测所用的规则的路径,默认路径$(/path/to/bin/oclint)/../lib/oclint/rules

    2. -disable-rule <规则名>: 让相对应的规则失效OCLint 规则列表

    3. -rc <参数>=<值> :修改阈值

    4. -report-type <报告类型>,有"text"、“html”、“json”、“pmd”、“xcode”几个类型

    5. -o <路径> 报告生成路径。

    eg:

    // 数值都是默认值
    -rc=LONG_CLASS=1000 \ #类行数限制  
    ​
    -rc=LONG_LINE=100 \  #每行的字符限制
    ​
    -rc=LONG_METHOD=50 \ #方法行数限制
    ​
    -rc=LONG_VARIABLE_NAME=20 \ #参数名字符限制
    ​
    -rc=MAXIMUM_IF_LENGTH=15 \ #if的行数限制
    ​
    -rc=MINIMUM_CASES_IN_SWITCH=3 \ #switch case的最小数目
    ​
    -rc=NPATH_COMPLEXITY=200 \ #通过该方法的非循环执行路径数量限制
    ​
    -rc=NSSS_METHOD=30 \ #连续未注释行数限制
    ​
    -rc=NESTED_BLOCK_DEPTH=5 \ #block嵌套层数限制
    ​
    -rc=SHORT_VARIABLE_NAME=3 \ #变量名的最小字符数限制
    ​
    -rc=TOO_MANY_FIELDS=20 \ #类成员限制
    ​
    -rc=TOO_MANY_METHODS=30 \ #类方法数限制
    ​
    -rc=TOO_MANY_PARAMETERS=10 \ #参数个数限制
    ​
    

    oclint-json-compilation-database 指令

    这是我们主要用到的指令,它是oclint 指令的升级版,使用起来相对 oclint 指令简单方便。

    可以通过 -- 的方式在指令的最后加上oclint 选项。

    oclint-json-compilation-database 指令有过滤文件选项

    • -i :包含进某些文件

    • -e : 过滤掉某些文件

    eg:

    1. 排除Pods 里的文件
      oclint-json-compilation-database -e Pods
    2. 包含进Pods里的文件
      oclint-json-compilation-database -i Pods

    简单的脚本集成,在根目录中:

    project_name=$(ls | grep xcodeproj | awk -F.xcodeproj '{print $1}') #可以获取项目名
    xcodebuild clean \
    xcodebuild \
    -workspace $(project_name).xcworkspace \
    -scheme          $(project_name) \
    -configuration   Debug \
    -sdks            iphonesimulator10.3 \
    | xcpretty -r json-compilation-database \
    cp build/reports/compilation_db.json ./compile_commands.json
    oclint-json-compilation-database -e Pods -- \
    -rc=LONG_CLASS=2000 \
    -rc=LONG_LINE=2000 \
    -report-type=html -o=report.html 
    open report.html
    rm -rf build
    rm compile_commands.json
    

    Jenkins集成

    配置oclint和PMD插件

    • jenkins 需要有PMD插件

    • 在构建时候 添加构建步骤 add build step 选择Execute shell

      4481019-a47434da0ced8daa.png

    然后配置 oclint 的指令,这里有几个注意点:

    • 先添加生成 compile_commands.json 指令。

    • 在某些情况下,oclint 指令比 oclint-json-compilation-database 指令好用。

    • 设置 report-type 为 pmd。

    • 设置输出文件名,接下来我们还需要用到这个名字。

    4481019-81e997eeb24156d0.png

    新建一个类型为 Publish PMD analysis results 的 post-build action。

    4481019-8879f5a59990079f.png

    然后输入刚才输出的文件名。

    4481019-1dcedba71e76d8ce.png

    然后我们就可以开始进行分析了,分析结束之后我们就可以通过 PMD Warnings 来查看各个规则相应的报错数了。

    4481019-947636414efb16b0.png

    比较高级点的脚本

    oclint命令手册

    oclint自定义规则

    如何自定义规则

    oclint全部规则

    jenkins

    脚本的编写事例

    OCLint 官网

    相关文章

      网友评论

        本文标题:OCLint的使用

        本文链接:https://www.haomeiwen.com/subject/bzckhftx.html