OCLint规则与结果分析

作者: 姜家志 | 来源:发表于2016-08-21 08:12 被阅读400次

OCLint是用来做c,c++和Objective-c的静态代码分析工具。在OCLint安装和使用中介绍了OCLint的安装和是使用。运行OCLint之后,要根据规则读懂结果,分析和修改代码。
有的时候代码出现的一些警告,并不需要立刻修改,但是有一个警告在哪里看着还是挺别扭的,这个时候会就需要了解如何禁止或者忽略一些规则,来消除警告。

OCLint规则

最新的OCLint中有67个检查的规则
http://docs.oclint.org/en/stable/rules/index.html
主要对针对nil值的检查,cocoa的obj检查,类型转换,空值的检查,简洁语法的检查,参数,size和不使用的参数和变量的检查。
主要分为9大类:

    Basic
    Cocoa
    Convention
    Empty
    Migration
    Naming
    Redundant
    Size
    Unused

之前介绍的的我们可以使用命令:oclint-json-compilation-database-e 参数忽略指定的文件,比如忽略Pods文件夹下面的检查:

oclint-json-compilation-database -e Pods -- -o=report.html

还可以还用 -rc 改变检查规则的默认值:

oclint-json-compilation-database -- -rc=LONG_LINE=200 -o=report.html

如果想禁止某一个规则的使用可以使用命令-disable-rule:

oclint-json-compilation-database -disable-rule=LongLine

这样就可以禁止Size中对LongLine的检查。

OCLint结果分析

OCLint的静态分析结果,警告的级别是从P1,P2,P3依次降低的,可以根据生成的报告找到对应的规则,以及修改建议。
比如下面是一条生成的警告信息:

..../.../SuperLoggerPreviewView.m:165:5:  bitwise operator in conditional [basic|P2] 

..../.../SuperLoggerPreviewView.m:165:5:的意思是产生警告的文件以及对应的行号。

bitwise operator in conditional:描述信息。
[basic|P2]这个信息中basic是指检查规则的类型,对应检查规则的9大类别,P2是警告的级别

可以在Rule Index 的第一个分类Basic中可以找到bitwiseoperatorinconditional,就是需要了解的规则信息:

Rule Index

禁止OCLint的检查

有的时候在已知的情况下一段代码会产生OCLint的警告,但是因为其他的一些原因,我们又不能修改代码,或者还没有找到更好的修改方式的时候,可以在代码中禁止OCLint的检查。

1.注解

可以使用注解的方法禁止OCLint的检查,语法是:

attribute((annotate("oclint:suppress[unused method parameter]")))

比如我们知道一个参数没有使用,而又不想产生警告信息就可以这样写:

- (IBAction)turnoverValueChanged:
    (id) __attribute__((annotate("oclint:suppress[unused method parameter]"))) sender
{
    int i; // won't suppress this one
    [self calculateTurnover];
}

对于方法的注解可以这样写:

bool __attribute__((annotate("oclint:suppress"))) aMethod(int aParameter)
{
    // warnings within this method are suppressed at all
    // like unused aParameter variable and empty if statement
    if (1) {}

    return true;
}

2.!OCLint
也可以通过//!OCLint注释的方式,不让OCLint检查。
比如:

void a() {
    int unusedLocalVariable; //!OCLINT
}

注释要写在对应的行上面才能禁止对应的检查,比如对于空的if/else禁止检查的注释为:

if (true) //!OCLint 
{
    // it is empty
}

相关文章

  • OCLint规则与结果分析

    OCLint是用来做c,c++和Objective-c的静态代码分析工具。在OCLint安装和使用中介绍了OCLi...

  • OCLint 自定义规则

    可能OCLint官方提供的检测规则不能满足我们的日常需求,OCLint也是支持自定义规则滴。 OCLint环境安装...

  • OCLint的部分规则(Size 部分)

    对OCLint的部分规则进行简单翻译解释,有部分进行了验证以及进一步分析、测试。OCLint其他相关内容如下: 1...

  • OCLint 安装使用

    简介 OCLint 官方文档[http://oclint.org/]OCLint是一种静态代码分析[https:/...

  • 使用OCLint + Jenkins集成iOS代码静态分析

    使用OCLint + Jenkins集成iOS代码静态分析 Installing OCLint Updating ...

  • oclint技术辅导

    oclint技术辅导(短时间快速熟悉从clangllvm到oclint的体系学会编写基于oclint的代码走查规则...

  • OClint的使用

    关于OCLint OCLint 是基于LLVM/Clang(前端编译)而开发的代码静态分析工具。 OCLint可用...

  • OCLint代码静态分析问题

    OCLint代码静态分析问题 oclint: error: one compiler command contai...

  • OCLint的规则

    一.前言 最新的OCLint中有71个检查的规则http://docs.oclint.org/en/stable/...

  • OCLint使用

    OCLint的分析结果:优先级的级别是从Priority 1, Priority 2, Priority 3 依次...

网友评论

    本文标题:OCLint规则与结果分析

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