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)
|
[SimplyDanny](https://github.com/SimplyDanny)
|
||||||
[#5009](https://github.com/realm/SwiftLint/issues/5009)
|
[#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`
|
* Fix autocorrect for `CGIntersectionRect` in `legacy_cggeometry_functions`
|
||||||
rule.
|
rule.
|
||||||
[Haoocen](https://github.com/Haoocen)
|
[Haoocen](https://github.com/Haoocen)
|
||||||
|
|
|
@ -68,6 +68,15 @@ private extension Syntax {
|
||||||
return false
|
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 {
|
private extension AttributeListSyntax {
|
||||||
|
@ -78,10 +87,12 @@ private extension AttributeListSyntax {
|
||||||
|
|
||||||
if hasAttributeImplyingObjC, parent?.is(ExtensionDeclSyntax.self) != true {
|
if hasAttributeImplyingObjC, parent?.is(ExtensionDeclSyntax.self) != true {
|
||||||
return objcAttribute
|
return objcAttribute
|
||||||
|
} else if parent?.is(EnumDeclSyntax.self) == true {
|
||||||
|
return nil
|
||||||
} else if parent?.isFunctionOrStoredProperty == true,
|
} else if parent?.isFunctionOrStoredProperty == true,
|
||||||
let parentClassDecl = parent?.parent?.parent?.parent?.parent?.as(ClassDeclSyntax.self),
|
let parentClassDecl = parent?.parent?.parent?.parent?.parent?.as(ClassDeclSyntax.self),
|
||||||
parentClassDecl.attributes.contains(attributeNamed: "objcMembers") {
|
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),
|
} else if let parentExtensionDecl = parent?.parent?.parent?.parent?.parent?.as(ExtensionDeclSyntax.self),
|
||||||
parentExtensionDecl.attributes?.objCAttribute != nil {
|
parentExtensionDecl.attributes?.objCAttribute != nil {
|
||||||
return objcAttribute
|
return objcAttribute
|
||||||
|
|
|
@ -13,7 +13,7 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
class Foo {
|
class Foo {
|
||||||
var bar: Any?
|
var bar: Any?
|
||||||
@objc
|
@objc
|
||||||
class Bar {
|
class Bar: NSObject {
|
||||||
@objc
|
@objc
|
||||||
var foo: Any?
|
var foo: Any?
|
||||||
}
|
}
|
||||||
|
@ -59,14 +59,15 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo {
|
||||||
|
@objc
|
||||||
class Bar: NSObject {
|
class Bar: NSObject {
|
||||||
@objc var foo: Any
|
@objc var foo: Any?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"""),
|
"""),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
@objc class Bar {}
|
@objc class Bar {}
|
||||||
}
|
}
|
||||||
"""),
|
"""),
|
||||||
|
@ -75,6 +76,59 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
@objc(addElementsObject:)
|
@objc(addElementsObject:)
|
||||||
@NSManaged public func addToElements(_ value: BlockEditorSettingElement)
|
@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("↓@objc @IBDesignable class Foo {}"),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
↓@objc var bar: Any?
|
↓@objc var bar: Any?
|
||||||
}
|
}
|
||||||
"""),
|
"""),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
↓@objc var bar: Any?
|
↓@objc var bar: Any?
|
||||||
↓@objc var foo: Any?
|
↓@objc var foo: Any?
|
||||||
@objc
|
@objc
|
||||||
|
@ -126,7 +180,7 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
"""),
|
"""),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Bar: NSObject {
|
class Bar: NSObject {
|
||||||
↓@objc var foo: Any
|
↓@objc var foo: Any
|
||||||
|
@ -160,23 +214,23 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
Example("↓@objc @IBDesignable class Foo {}"): Example("@IBDesignable class Foo {}"),
|
Example("↓@objc @IBDesignable class Foo {}"): Example("@IBDesignable class Foo {}"),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
↓@objc var bar: Any?
|
↓@objc var bar: Any?
|
||||||
}
|
}
|
||||||
"""):
|
"""):
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
var bar: Any?
|
var bar: Any?
|
||||||
}
|
}
|
||||||
"""),
|
"""),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
↓@objc var bar: Any?
|
↓@objc var bar: Any?
|
||||||
↓@objc var foo: Any?
|
↓@objc var foo: Any?
|
||||||
@objc
|
@objc
|
||||||
class Bar {
|
class Bar: NSObject {
|
||||||
@objc
|
@objc
|
||||||
var foo2: Any?
|
var foo2: Any?
|
||||||
}
|
}
|
||||||
|
@ -184,11 +238,11 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
"""):
|
"""):
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
var bar: Any?
|
var bar: Any?
|
||||||
var foo: Any?
|
var foo: Any?
|
||||||
@objc
|
@objc
|
||||||
class Bar {
|
class Bar: NSObject {
|
||||||
@objc
|
@objc
|
||||||
var foo2: Any?
|
var foo2: Any?
|
||||||
}
|
}
|
||||||
|
@ -230,7 +284,7 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
"""),
|
"""),
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Bar: NSObject {
|
class Bar: NSObject {
|
||||||
↓@objc var foo: Any
|
↓@objc var foo: Any
|
||||||
|
@ -239,7 +293,7 @@ struct RedundantObjcAttributeRuleExamples {
|
||||||
"""):
|
"""):
|
||||||
Example("""
|
Example("""
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Foo {
|
class Foo: NSObject {
|
||||||
@objcMembers
|
@objcMembers
|
||||||
class Bar: NSObject {
|
class Bar: NSObject {
|
||||||
var foo: Any
|
var foo: Any
|
||||||
|
|
Loading…
Reference in New Issue