Skip to content

Commit 02718ca

Browse files
authored
Add optionalMemberOf symbol under the correct container symbol (#760)
rdar://119183922
1 parent ddf8f0a commit 02718ca

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

Sources/SwiftDocC/Infrastructure/Link Resolution/PathHierarchy.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ private extension SymbolGraph.Relationship.Kind {
599599
/// Whether or not this relationship kind forms a hierarchical relationship between the source and the target.
600600
var formsHierarchy: Bool {
601601
switch self {
602-
case .memberOf, .requirementOf, .optionalRequirementOf, .extensionTo, .declaredIn:
602+
case .memberOf, .optionalMemberOf, .requirementOf, .optionalRequirementOf, .extensionTo, .declaredIn:
603603
return true
604604
default:
605605
return false

Tests/SwiftDocCTests/Infrastructure/PathHierarchyTests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1618,6 +1618,35 @@ class PathHierarchyTests: XCTestCase {
16181618
XCTAssertEqual(paths[memberID], "/ModuleName/ContainerName/MemberName")
16191619
}
16201620

1621+
func testOptionalMemberUnderCorrectContainer() throws {
1622+
let containerID = "some-container-symbol-id"
1623+
let otherID = "some-other-symbol-id"
1624+
let memberID = "some-member-symbol-id"
1625+
1626+
let exampleDocumentation = Folder(name: "unit-test.docc", content: [
1627+
JSONFile(name: "ModuleName.symbols.json", content: makeSymbolGraph(
1628+
moduleName: "ModuleName",
1629+
symbols: [
1630+
(containerID, .swift, ["ContainerName"]),
1631+
(otherID, .swift, ["ContainerName"]),
1632+
(memberID, .swift, ["ContainerName", "MemberName1"]),
1633+
],
1634+
relationships: [
1635+
.init(source: memberID, target: containerID, kind: .optionalMemberOf, targetFallback: nil),
1636+
]
1637+
))
1638+
])
1639+
1640+
let tempURL = try createTempFolder(content: [exampleDocumentation])
1641+
let (_, _, context) = try loadBundle(from: tempURL)
1642+
let tree = try XCTUnwrap(context.linkResolver.localResolver?.pathHierarchy)
1643+
1644+
let paths = tree.caseInsensitiveDisambiguatedPaths(includeDisambiguationForUnambiguousChildren: true)
1645+
XCTAssertEqual(paths[otherID], "/ModuleName/ContainerName-2vaqf")
1646+
XCTAssertEqual(paths[containerID], "/ModuleName/ContainerName-qwwf")
1647+
XCTAssertEqual(paths[memberID], "/ModuleName/ContainerName-qwwf/MemberName1")
1648+
}
1649+
16211650
func testMultiPlatformModuleWithExtension() throws {
16221651
let (_, context) = try testBundleAndContext(named: "MultiPlatformModuleWithExtension")
16231652
let tree = try XCTUnwrap(context.linkResolver.localResolver?.pathHierarchy)

0 commit comments

Comments
 (0)