OCLint官方规则文档中文说明
本文基于OClint官方文档进行翻译,本章顺序与官网相同,如果查看后仍不能明白问题原因,请前往官方文档查看示例,官方文档地址
Basic
1.Bitwise operator in conditional
说明:对于按位与或者按位或的情况,OClint认为这不便于理解。
2.Broken Nil Check
说明:nil检查,在某些情况会返回相反的结果
3.Broken Null Check
说明:NULL检查会导致程序crash
4.Broken Oddness Check
说明:X%2==1对负数不起作用,需要使用X&1 ==1或者X%2!=0来代替
5.collapsible if statements
说明:判断两个相连的if是否能够合并
6.Constant Conditional Operator
说明:条件是否永远为true或者永远false?
7. constant if expression
说明:if判断中的值是恒定的,比如if(true),其中的值永远为真。
8.dead code
说明:表示标示位置有永远不会被执行的代码。
9.Double Negative
说明:表示不需要使用双重否定,形如!!1,~~1等,因为这并没有用处。
10.ForLoop Should Be WhileLoop
说明:表示此处不应该用for循环而应该使用while循环。
10.Goto Statement
说明:提示谨慎使用Goto语句。
11.Jumbled Incrementer
说明:混乱的增量,多数出现在嵌套for循环中,如果不是因为笔误写错了,那么这种混乱的写法容易造成代码阅读的问题。
12.Misplaced Null Check
说明:Null Check被放错地方,在OC中向一个空指针发送消息并不会发生什么,但是在C或者C++中可能会引起crash,同时可能会造成代码阅读的困惑。
13.Multiple Unary Operator
说明:多重一元操作很难被理解。形如:int b = -(+(!(~1)));)
14.Return From Finally Block
说明:在最后一个block中return的做法是不推荐的。
15.Throw Exception From Finally Block
说明:不要在最后一个BLOCK中抛出异常,因为这样的情况可能会掩盖其他异常或者代码缺陷。
Cocoa(OC)
1.Must Override Hash With IsEqual
说明:如果重写isEqual,一定也要重写hash,原名为ObjCVerifyIsEqualHash。
2.Must Call Super
说明:提示需要增加call super的情况,例如layoutSubviews方法,需要添加[super layoutSubviews].
3.Verify Prohibited Call
说明:当一个方法声明时含有attribute((annotate("oclint:enforce[prohibited call]"))),它的所有调用都是被禁止的。
4.Verify Protected Method
说明:当一个方法声明含有attribute((annotate("oclint:enforce[protected method]")))时,只有它和它的子类可以调用,因为OC中没有Protected,可以用这种方式达到Protected效果。
5.Subclass Must Implement
说明:子类必须实现,哪怕是一个抽象方法。
Convention
1.Avoid Branching Statement As Last InLoop
说明:表示不要在for循环或者其他循环语句的末尾使用break.
2.Base Class Destructor Should Be Virtual Or Protected
说明:基类的析构函数要么是公共的虚函数,要么是保护性的非虚函数。
3.covered switch statements dont need default
说明:因为已经覆盖了所有的switch分支,所以不需要写default break部分。
4.Default Label Not Last In Switch Statement
说明:DeFault没有放在Switch的最后一行。
5.Destructor Of VirtualClass
说明:本规则强制要求虚类的析构函数必须也是虚函数。
6.Inverted Logic
说明:反转逻辑让人难以理解。一般是指用(!a)而非(a)来判断让人难以理解。
7.Missing Break In Switch Statement
说明:在Switch中如果缺少break很容易引入bug.
8.Non Case Label In Switch Statement
说明:不要把label放到switch中。
9.ivar assignment outside accessors or init
说明:意思是某些成员的初始化不在getter/setter或者init中,而在其他位置。
10.parameter reassignment
说明:通常认为是赋值问题,具体问题需要具体判断,有的时候是因为对传来的参数进行了重新赋值,大多数时候不能修改。
11.use early exits and continue
说明:意思是,有其他出口时,先执行其他出口,再继续代码。
12.Switch Statements Should Have Default
说明:如果并不是每一个分支都有一条路径,那么switch重必须含有default.
13.Too Few Branches In Switch Statement
说明:Switch中分支很少,可以用if代替。
Design
1.Avoid Default Arguments On Virtual Methods
说明:避免给虚函数设置默认参数,给虚函数设置默认参数会破坏多样性和引起不必要的层次结构发杂性。
2.Avoid Private Static Members
说明:避免使用私有静态成员,静态成员很容易破换封装性。
Empty
1.Empty Catch Statement
说明:主要发生在一个异常exception被catch到了,但是却没有对此做任何操作。
2.Empty Do While Statement
说明:在do-while循环中没有做任何事情。
3.Empty Else Block
说明:在if中有操作,else中却是空的,此时else可以被安全移除。
4.Empty Finally Statemen
说明:在@finally中没有进行任何操作。
5.Empty For Statement
说明:for循环为空。
6.Empty If Statement
说明:if中代码为空。
7.Empty Switch Statement
说明:Switch中代码为空。
8.Empty Try Statement
说明:try中代码为空。
9.Empty While Statement
说明:While循环中没有代码。
Migration
1.Replace With Boxed Expression
说明:用来说明umberWithInt和stringWithUTF8String:getenv的简写形式。
2.Replace With Container Literal
说明:用来说明arrayWithObjects和dictionaryWithObjects的简写形式。
3.replace with number literal
说明:用来说明numberWithInt和numberWithBOOL的简写形式。
4.replace with object subscripting
说明:用来说明objectAtIndex和objectForKey的简写形式。
Naming
1.Long Variable Name
说明:命名太长。
2.Short Variable Name
说明:命名过短。
Redundant
1.Redundant Conditional Operator
说明:冗余的条件运算符,可以一步到位的判断,不需要进行多余比较。
2.Redundant If Statement
说明:if判断是多余的。
3.Redundant local variable
说明:return中的参数可以使用一个表达式来表示。
4.RedundantNilCheck
说明:在C或者C++中适用的判空检查在OC中是多余的。因为在OC中向空对象发送消息会返回false值。
5.UnnecessaryElseStatement
说明:如果if中已经带有return,则不需要写else语句。
6.Unnecessary Null Check For Dealloc
说明:在Dealloc中不需要判空,就能Delete元素。
7.useless parentheses
说明:用来表示有些括号是不必要的。
Size
1.High Cyclomatic Complexity
说明:圈复杂度过高。V(G)=e-n+2。其中,e表示控制流图中边的数量,n表示控制流图中节点的数量,或者V(G)=区域数=判定节点数+1。
2.Long Class
说明:类行数太多。
3.Long Line
说明:一行字数过多。
4.Long Method
说明:在一个方法中试图完成很多事情,在一个方法中应该完成一个功能并把它做好。
5.High Ncss Method
说明:其实是指某个代码块中代码行数过多,查看代码块中代码是否能拆分,公共功能能否提供一个公共借口。
6.Deep Nested Block
说明:层次太深,多层嵌套。
7.High NPath Complexity
说明:NPath复杂度是一个方法中各种可能的执行路径总和,一般把200作为考虑降低复杂度的临界点,这里提示NPath复杂度过高。
8.Too Many Fields
说明:一个类中有太多的域表示它的东西太多了,需要进行适当的抽象。
9.Too Many Methods
说明:一个类中方法过多。
10.Too Many Parameters
说明:一个方法中参数过多。
Unused
1.Unused Local Variable
说明:没有被使用的局部变量。
2.Unused Method Parameter
说明:没有被使用的方法参数,请谨慎修改
上一篇下一篇