Fix false alarms in `redundant_objc_attribute` rule (#4742)
This commit is contained in:
parent
a2ba0a0626
commit
521df18fdb
|
@ -32,6 +32,11 @@
|
|||
[SimplyDanny](https://github.com/SimplyDanny)
|
||||
[#5009](https://github.com/realm/SwiftLint/issues/5009)
|
||||
|
||||
* Fix false positives on `redundant_objc_attribute` rule for enums
|
||||
and private members.
|
||||
[Martin Redington](https://github.com/mildm8nnered)
|
||||
[#4633](https://github.com/realm/SwiftLint/issues/4633)
|
||||
|
||||
* Fix autocorrect for `CGIntersectionRect` in `legacy_cggeometry_functions`
|
||||
rule.
|
||||
[Haoocen](https://github.com/Haoocen)
|
||||
|
|
|
@ -68,6 +68,15 @@ private extension Syntax {
|
|||
return false
|
||||
}
|
||||
}
|
||||
|
||||
var functionOrVariableModifiers: ModifierListSyntax? {
|
||||
if let functionDecl = self.as(FunctionDeclSyntax.self) {
|
||||
return functionDecl.modifiers
|
||||
} else if let variableDecl = self.as(VariableDeclSyntax.self) {
|
||||
return variableDecl.modifiers
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
private extension AttributeListSyntax {
|
||||
|
@ -78,10 +87,12 @@ private extension AttributeListSyntax {
|
|||
|
||||
if hasAttributeImplyingObjC, parent?.is(ExtensionDeclSyntax.self) != true {
|
||||
return objcAttribute
|
||||
} else if parent?.is(EnumDeclSyntax.self) == true {
|
||||
return nil
|
||||
} else if parent?.isFunctionOrStoredProperty == true,
|
||||
let parentClassDecl = parent?.parent?.parent?.parent?.parent?.as(ClassDeclSyntax.self),
|
||||
parentClassDecl.attributes.contains(attributeNamed: "objcMembers") {
|
||||
return objcAttribute
|
||||
return parent?.functionOrVariableModifiers.isPrivateOrFileprivate == true ? nil : objcAttribute
|
||||
} else if let parentExtensionDecl = parent?.parent?.parent?.parent?.parent?.as(ExtensionDeclSyntax.self),
|
||||
parentExtensionDecl.attributes?.objCAttribute != nil {
|
||||
return objcAttribute
|
||||
|
|
|
@ -13,7 +13,7 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
class Foo {
|
||||
var bar: Any?
|
||||
@objc
|
||||
class Bar {
|
||||
class Bar: NSObject {
|
||||
@objc
|
||||
var foo: Any?
|
||||
}
|
||||
|
@ -59,14 +59,15 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
@objc
|
||||
class Bar: NSObject {
|
||||
@objc var foo: Any
|
||||
@objc var foo: Any?
|
||||
}
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
@objc class Bar {}
|
||||
}
|
||||
"""),
|
||||
|
@ -75,6 +76,59 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
@objc(addElementsObject:)
|
||||
@NSManaged public func addToElements(_ value: BlockEditorSettingElement)
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
public class Foo: NSObject {
|
||||
@objc
|
||||
private func handler(_ notification: Notification) {
|
||||
}
|
||||
|
||||
func registerForNotifications() {
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(handler(_:)), name: nil, object: nil)
|
||||
}
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
class Foo: NSObject { }
|
||||
|
||||
@objc extension Foo {
|
||||
@objc enum Bar: Int {
|
||||
case bar
|
||||
}
|
||||
|
||||
var bar: Bar { .bar }
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
class Foo: NSObject { }
|
||||
|
||||
@objc extension Foo {
|
||||
@objc private enum Baz: Int {
|
||||
case baz
|
||||
}
|
||||
|
||||
private var baz: Baz { .baz }
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
internal class Foo: NSObject {
|
||||
@objc
|
||||
private var baz: Int = 1
|
||||
|
||||
var x: Any? {
|
||||
value(forKey: "baz")
|
||||
}
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo: NSObject {
|
||||
@objc enum Bar: Int {
|
||||
case bar
|
||||
}
|
||||
}
|
||||
""")
|
||||
]
|
||||
|
||||
|
@ -90,13 +144,13 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
Example("↓@objc @IBDesignable class Foo {}"),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
↓@objc var bar: Any?
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
↓@objc var bar: Any?
|
||||
↓@objc var foo: Any?
|
||||
@objc
|
||||
|
@ -126,7 +180,7 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
@objcMembers
|
||||
class Bar: NSObject {
|
||||
↓@objc var foo: Any
|
||||
|
@ -160,23 +214,23 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
Example("↓@objc @IBDesignable class Foo {}"): Example("@IBDesignable class Foo {}"),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
↓@objc var bar: Any?
|
||||
}
|
||||
"""):
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
var bar: Any?
|
||||
}
|
||||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
↓@objc var bar: Any?
|
||||
↓@objc var foo: Any?
|
||||
@objc
|
||||
class Bar {
|
||||
class Bar: NSObject {
|
||||
@objc
|
||||
var foo2: Any?
|
||||
}
|
||||
|
@ -184,11 +238,11 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
"""):
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
var bar: Any?
|
||||
var foo: Any?
|
||||
@objc
|
||||
class Bar {
|
||||
class Bar: NSObject {
|
||||
@objc
|
||||
var foo2: Any?
|
||||
}
|
||||
|
@ -230,7 +284,7 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
"""),
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
@objcMembers
|
||||
class Bar: NSObject {
|
||||
↓@objc var foo: Any
|
||||
|
@ -239,7 +293,7 @@ struct RedundantObjcAttributeRuleExamples {
|
|||
"""):
|
||||
Example("""
|
||||
@objcMembers
|
||||
class Foo {
|
||||
class Foo: NSObject {
|
||||
@objcMembers
|
||||
class Bar: NSObject {
|
||||
var foo: Any
|
||||
|
|
Loading…
Reference in New Issue