False positive inert_defer
with condition compilation #4615
Closed
Description
New Issue Checklist
- Updated SwiftLint to the latest version
- I searched for existing GitHub issues
Describe the bug
Rule inert_defer
is false positive when defer is wrapped in condition compilation. For example: #if os(macOS)
Complete output when running SwiftLint, including the stack trace and command used
$ swiftlint Test.swift
Linting Swift files at paths Test.swift
Linting 'Test.swift' (1/1)
.../Test.swift:6:9: warning: Inert Defer Violation: If defer is at the end of its parent scope, it will be executed right where it is anyway. (inert_defer)
Done linting! Found 1 violation, 0 serious in 1 file.
Environment
-
SwiftLint version -
0.50.1
-
Installation method used - Homebrew
-
Paste your configuration file - default
-
Xcode version -
Xcode 14.0.1 Build version 14A400
-
Run -
swiftlint lint --path Test.swift --no-cache --enable-all-rules
../Test.swift:4:5: warning: Explicit ACL Violation: All declarations should specify Access Control Level keywords explicitly. (explicit_acl)
../Test.swift:6:9: warning: Inert Defer Violation: If defer is at the end of its parent scope, it will be executed right where it is anyway. (inert_defer)
../Test.swift:3:8: warning: Missing Docs Violation: public declarations should be documented. (missing_docs)
../Test.swift:3:8: warning: Required Deinit Violation: Classes should have an explicit deinit method. (required_deinit)
public class Test {
func hello(name: String) -> String {
#if os(macOS)
// this trigger violation: Inert Defer Violation: If defer is at the end of its parent scope, it will be executed right where it is anyway. (inert_defer)
defer {
print(self)
}
#endif
print(name)
return "Hello " + name
}
}