Skip to content
This repository was archived by the owner on Jun 1, 2023. It is now read-only.

Commit bac46a1

Browse files
committed
Add resolution for nested types through typealiases
1 parent 099ac58 commit bac46a1

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

Sources/SwiftDoc/Interface.swift

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,10 +173,19 @@ public final class Interface {
173173
let `typealias` = symbol.api as? Typealias,
174174
let initializedType = `typealias`.initializedType
175175
{
176-
pathComponents = (symbol.context.compactMap { ($0 as? Symbol)?.name ?? ($0 as? Extension)?.extendedType }) + [initializedType]
176+
let initializedTypePathComponents = initializedType.split(separator: ".")
177+
let candidates = symbolsGroupedByIdentifier.keys
178+
.filter { $0.name == initializedType }
179+
.filter { $0.pathComponents.count <= initializedTypePathComponents.count }
180+
if let id = candidates.max(by: { $0.pathComponents.count > $1.pathComponents.count }) {
181+
pathComponents = id.pathComponents + CollectionOfOne(id.name)
182+
} else {
183+
return []
184+
}
177185
}
178186
}
179187

180-
return symbolsGroupedByQualifiedName[pathComponents.joined(separator: ".")] ?? []
188+
let path = pathComponents.joined(separator: ".")
189+
return symbolsGroupedByQualifiedName[path] ?? []
181190
}
182191
}

Tests/SwiftDocTests/InterfaceTypeTests.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,10 @@ final class InterfaceTypeTests: XCTestCase {
282282
}
283283
284284
public typealias MyClass = SomeClass
285+
286+
public class AnotherClass {
287+
typealias PublicClass = SomeClass
288+
}
285289
286290
public typealias ExternalClass = UIGestureRecognizer
287291
"""#
@@ -306,6 +310,12 @@ final class InterfaceTypeTests: XCTestCase {
306310
XCTAssertEqual(module.interface.symbols(named: "MyClass.InnerObject", resolvingTypealiases: true).first?.name, "InnerObject")
307311
XCTAssertNil(module.interface.symbols(named: "MyClass.InnerObject", resolvingTypealiases: false).first)
308312

313+
XCTAssertEqual(module.interface.symbols(named: "AnotherClass.PublicClass", resolvingTypealiases: true).first?.name, "SomeClass")
314+
XCTAssertTrue(module.interface.symbols(named: "AnotherClass.PublicClass", resolvingTypealiases: false).first?.api is Typealias)
315+
316+
XCTAssertEqual(module.interface.symbols(named: "AnotherClass.PublicClass.ActuallyInternal", resolvingTypealiases: true).first?.name, "InnerStruct")
317+
XCTAssertNil(module.interface.symbols(named: "AnotherClass.PublicClass.ActuallyInternal", resolvingTypealiases: false).first)
318+
309319
XCTAssertNil(module.interface.symbols(named: "ExternalClass", resolvingTypealiases: true).first)
310320
XCTAssertTrue(module.interface.symbols(named: "ExternalClass", resolvingTypealiases: false).first?.api is Typealias)
311321

0 commit comments

Comments
 (0)