博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OCLint 规则与结果分析
阅读量:5764 次
发布时间:2019-06-18

本文共 1892 字,大约阅读时间需要 6 分钟。

OCLint是用来做c,c++和Objective-c的静态代码分析工具。在 中介绍了OCLint的安装和是使用。运行OCLint之后,要根据规则读懂结果,分析和修改代码。

有的时候代码出现的一些警告,并不需要立刻修改,但是有一个警告在哪里看着还是挺别扭的,这个时候会就需要了解如何禁止或者忽略一些规则,来消除警告。

OCLint规则

最新的OCLint中有67个检查的规则,

主要对针对nil值的检查,cocoa的obj检查,类型转换,空值的检查,简洁语法的检查,参数,size和不使用的参数和变量的检查。

主要分为9大类:

BasicCocoaConventionEmptyMigrationNamingRedundantSizeUnused

之前介绍的的我们可以使用命令: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是警告的级别

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

图片描述

禁止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}

转载地址:http://tawux.baihongyu.com/

你可能感兴趣的文章
Ansible-playbook 条件判断when、pause(学习笔记二十三)
查看>>
5种你未必知道的JavaScript和CSS交互的方法(转发)
查看>>
线程进程间通信机制
查看>>
galera mysql 多主复制启动顺序及命令
查看>>
JS prototype 属性
查看>>
中位数性质——数列各个数到中位数的距离和最小
查看>>
WebApp之Meta标签
查看>>
添加Java文档注释
查看>>
Python3批量爬取网页图片
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>
微信公众平台开发(96) 多个功能整合
查看>>
[转]MVC4项目中验证用户登录一个特性就搞定
查看>>
用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
查看>>
Android 阴影,圆形的Button
查看>>
C++概述
查看>>
卡特兰数
查看>>
006_mac osx 应用跨屏幕
查看>>
nginx中配置文件的讲解
查看>>
MindNode使用
查看>>
SQL Server 2016 Alwayson新增功能
查看>>