diff --git a/CHANGELOG.md b/CHANGELOG.md index aeb705e4758..49ce2706e45 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,11 @@ [jszumski](https://github.com/jszumski) [#5242](https://github.com/realm/SwiftLint/pull/5242) +* Fix false positive in `unused_import` rule when using a constructor + defined in a transitive module. + [jszumski](https://github.com/jszumski) + [#5246](https://github.com/realm/SwiftLint/pull/5246) + ## 0.53.0: Laundry List #### Breaking diff --git a/Source/SwiftLintBuiltInRules/Rules/Lint/UnusedImportRule.swift b/Source/SwiftLintBuiltInRules/Rules/Lint/UnusedImportRule.swift index ffb283baf2a..0b5a8d61e9b 100644 --- a/Source/SwiftLintBuiltInRules/Rules/Lint/UnusedImportRule.swift +++ b/Source/SwiftLintBuiltInRules/Rules/Lint/UnusedImportRule.swift @@ -177,6 +177,11 @@ private extension SwiftLintFile { } appendUsedImports(cursorInfo: cursorInfo, usrFragments: &usrFragments) + + // also collect modules from secondary symbol usage if available + for secondaryInfo in cursorInfo.secondarySymbols { + appendUsedImports(cursorInfo: secondaryInfo, usrFragments: &usrFragments) + } } return (imports: imports, usrFragments: usrFragments) diff --git a/Source/SwiftLintCore/Extensions/Dictionary+SwiftLint.swift b/Source/SwiftLintCore/Extensions/Dictionary+SwiftLint.swift index dad6606e62b..fa61c93b582 100644 --- a/Source/SwiftLintCore/Extensions/Dictionary+SwiftLint.swift +++ b/Source/SwiftLintCore/Extensions/Dictionary+SwiftLint.swift @@ -180,6 +180,12 @@ public struct SourceKittenDictionary { let array = value["key.inheritedtypes"] as? [SourceKitRepresentable] ?? [] return array.compactMap { ($0 as? [String: String]).flatMap { $0["key.name"] } } } + + public var secondarySymbols: [SourceKittenDictionary] { + let array = value["key.secondary_symbols"] as? [SourceKitRepresentable] ?? [] + return array.compactMap { $0 as? [String: SourceKitRepresentable] } + .map(Self.init) + } } extension SourceKittenDictionary {