OCLint 0.10.2 包含67条规则
Basic(基本)
- BitWiseOperationInConditional (在条件语句中查找按位操作的条件、虽然这些操作都很“聪明”,但太聪明的语法很难理解 like:
if (a | b)
) - BrokenNilCheck (nil检查 在某些情况会返回相反的结果 like:
if (!obj1)
) - BrokenNullCheck (null检查会导致程序crash like:
if (a == NULL
) - BrokenOddnessCheck (
x % 2 == 1
对于负数不起作用、使用x & 1 == 1
orx % 2 != 0
代替) - CollapsibleIfStatements(检查是否两个情况可以合在一个条件中
if (x) // these two if statements can be
{
if (y) // combined to if (x && y)
{
foo();
}
}`
- ConstantConditionalOperator(是否条件永远true或者永远false like:
int a = 1== 1 ? 1:0
) - ConstantIfExpression(条件恒true like:
if(true)
) - DeadCode (永远不会执行的代码 like:
if(a = 1) return 1; return 2;//deadcode
) - DoubleNegative(双重否定 like:
if(!!a)
) - ForLoopShouldBeWhileLoop (在应该使用while的时候是用来for)
- GotoStatement (使用goto 语句 like:
goto a
) - JumbledIncrementer 乱七八糟的增量 like:
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; i++) { // references both 'i' and 'j'
}
}
- MisplacedNilCheck (nil 检查被放错了地方、在OC中、向一个nil对象发送消息、什么也不会发生、但是代码读起来会很让人费解 like:
if ([obj1 isEqualTo:obj2] && obj1)
) - MisplacedNullCheck (null check被放错了地方、在C 和C++中、想一个null 指针发送消息会导致crash like:
if (a->bar(b) && a != NULL)
) - MultipleUnaryOperator (多重一元操作很难理解 like:
int b = -(+(!(~1)));
) - ReturnFromFinallyBlock(在finallyBlock 中return 是不推荐的)
@try
{
foo();
}
@catch(id ex)
{
bar();
}
@finally
{
return; // this can discard exceptions.
}
- ThrowExceptionFromFinallyBlock()
@try {;}
@catch(id ex) {;}
@finally {
id ex1;
@throw ex1; // this throws an exception
NSException *ex2 = [NSException new];
[ex2 raise]; // this throws an exception, too
}
Cocoa(objc)
- ObjCVerifyIsEqualHash(重写isEqual 一定要重写 hash)
- ObjCVerifyIsEqualHash(必须call super的情况 比如
layoutSubViews
) - ObjCVerifyProtectedMethod(因为在OC中是没有protected,所以有的时候希望强制某个方法只能被它自己或者子类才能调用)
@interface A : NSObject
- (void)foo __attribute__((annotate("oclint:enforce[protected method]")));
@end
@interface B : NSObject
@property (strong, nonatomic) A* a;
@end
@implementation B
- (void)bar {
[self.a foo]; // calling protected method foo from outside A and its subclasses
}
@end
- ObjCVerifySubclassMustImplement (子类必须实现的方法)