SwiftLint/Source/SwiftLintFramework/Rules/Lint/NSObjectPreferIsEqualRuleEx...

156 lines
4.5 KiB
Swift

internal struct NSObjectPreferIsEqualRuleExamples {
static let nonTriggeringExamples: [Example] = [
// NSObject subclass without ==
Example("""
class AClass: NSObject {
}
"""),
// @objc class without ==
Example("""
@objc class AClass: SomeNSObjectSubclass {
}
"""),
// Class with == which does not subclass NSObject
Example("""
class AClass: Equatable {
static func ==(lhs: AClass, rhs: AClass) -> Bool {
return true
}
"""),
// NSObject subclass implementing isEqual
Example("""
class AClass: NSObject {
override func isEqual(_ object: Any?) -> Bool {
return true
}
}
"""),
// @objc class implementing isEqual
Example("""
@objc class AClass: SomeNSObjectSubclass {
override func isEqual(_ object: Any?) -> Bool {
return false
}
}
"""),
// NSObject subclass implementing == with different signature
Example("""
class AClass: NSObject {
static func ==(lhs: AClass, rhs: BClass) -> Bool {
return true
}
}
"""),
// Equatable struct
Example("""
struct AStruct: Equatable {
static func ==(lhs: AStruct, rhs: AStruct) -> Bool {
return false
}
}
"""),
// Equatable enum
Example("""
enum AnEnum: Equatable {
static func ==(lhs: AnEnum, rhs: AnEnum) -> Bool {
return true
}
}
"""),
// Nested class is not itself inheriting from NSObject
Example("""
class C: NSObject {
class NestedClass {
static func ==(lhs: NestedClass, rhs: NestedClass) -> Bool {
return false
}
}
}
""", excludeFromDocumentation: true),
// Enum inside nested class inheriting from NSObject
Example("""
public final class A: NSObject {
public enum B: Equatable {
case c
public func hash(into hasher: inout Hasher) {
filename.original.hash(into: &hasher)
}
public static func == (lhs: B, rhs: B) -> Bool {
return true
}
}
}
""", excludeFromDocumentation: true)
]
static let triggeringExamples: [Example] = [
// NSObject subclass implementing ==
Example("""
class AClass: NSObject {
↓static func ==(lhs: AClass, rhs: AClass) -> Bool {
return false
}
}
"""),
// @objc class implementing ==
Example("""
@objc class AClass: SomeOtherNSObjectSubclass {
↓static func ==(lhs: AClass, rhs: AClass) -> Bool {
return true
}
}
"""),
// Equatable NSObject subclass implementing ==
Example("""
class AClass: NSObject, Equatable {
↓static func ==(lhs: AClass, rhs: AClass) -> Bool {
return false
}
}
"""),
// NSObject subclass overriding isEqual and implementing ==
Example("""
class AClass: NSObject {
override func isEqual(_ object: Any?) -> Bool {
guard let other = object as? AClass else {
return false
}
return true
}
↓static func ==(lhs: AClass, rhs: AClass) -> Bool {
return false
}
}
"""),
// Nested @objc class implementing ==
Example("""
class C {
@objc class NestedClass {
↓static func ==(lhs: NestedClass, rhs: NestedClass) -> Bool {
return false
}
}
}
struct S {
@objcMembers class NestedClass {
↓static func ==(lhs: NestedClass, rhs: NestedClass) -> Bool {
return false
}
}
}
enum E {
struct S {
@objc class NestedClass {
↓static func ==(lhs: NestedClass, rhs: NestedClass) -> Bool {
return false
}
}
}
}
""", excludeFromDocumentation: true)
]
}