From 31e9316472117158fa3d8b97fb5c29a9d4f6a0a8 Mon Sep 17 00:00:00 2001 From: Marcelo Fabri Date: Wed, 28 Apr 2021 17:58:01 -0700 Subject: [PATCH] Fix false false positive in `empty_enum_arguments` Fixes #3562 --- CHANGELOG.md | 5 ++++- .../Rules/Style/EmptyEnumArgumentsRule.swift | 13 +++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e5e4cc12ae..1e650cbbf0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,10 @@ #### Bug Fixes -* None. +* Fix false positives in `empty_enum_arguments` rule when comparing values + with a static member (e.g. `if number == .zero`). + [Marcelo Fabri](https://github.com/marcelofabri) + [#3562](https://github.com/realm/SwiftLint/issues/3562) ## 0.43.1: Laundroformat diff --git a/Source/SwiftLintFramework/Rules/Style/EmptyEnumArgumentsRule.swift b/Source/SwiftLintFramework/Rules/Style/EmptyEnumArgumentsRule.swift index 120cb8cb44..ec2317abcd 100644 --- a/Source/SwiftLintFramework/Rules/Style/EmptyEnumArgumentsRule.swift +++ b/Source/SwiftLintFramework/Rules/Style/EmptyEnumArgumentsRule.swift @@ -44,7 +44,9 @@ public struct EmptyEnumArgumentsRule: SubstitutionCorrectableASTRule, Configurat wrapInSwitch("case (let f as () -> String)?"), wrapInSwitch("default"), Example("if case .bar = foo {\n}"), - Example("guard case .bar = foo else {\n}") + Example("guard case .bar = foo else {\n}"), + Example("if foo == .bar() {}"), + Example("guard foo == .bar() else { return }") ], triggeringExamples: [ wrapInSwitch("case .bar↓(_)"), @@ -53,7 +55,9 @@ public struct EmptyEnumArgumentsRule: SubstitutionCorrectableASTRule, Configurat wrapInSwitch("case .bar↓() where method() > 2"), wrapInFunc("case .bar↓(_)"), Example("if case .bar↓(_) = foo {\n}"), - Example("guard case .bar↓(_) = foo else {\n}") + Example("guard case .bar↓(_) = foo else {\n}"), + Example("if case .bar↓() = foo {\n}"), + Example("guard case .bar↓() = foo else {\n}") ], corrections: [ wrapInSwitch("case .bar↓(_)"): wrapInSwitch("case .bar"), @@ -85,6 +89,7 @@ public struct EmptyEnumArgumentsRule: SubstitutionCorrectableASTRule, Configurat return [] } + let needsCase = kind == .if || kind == .guard let contents = file.stringView let callsRanges = dictionary.substructure.compactMap { dict -> NSRange? in @@ -127,6 +132,10 @@ public struct EmptyEnumArgumentsRule: SubstitutionCorrectableASTRule, Configurat } } + if needsCase, file.match(pattern: "\\bcase\\b", with: [.keyword]).isEmpty { + return nil + } + if callsRanges.contains(where: parenthesesRange.intersects) { return nil }