Skip to content

Commit bc97f95

Browse files
authored
Avoid dropping source language information for external content (#120)
* Avoid dropping source language information for external content rdar://91179282 * Update test-data-external-resolver to pass new SourceLanguage information * Avoid dropping source language information when `availableLanguages` is empty for external content
1 parent cb3eb81 commit bc97f95

File tree

3 files changed

+38
-28
lines changed

3 files changed

+38
-28
lines changed

Sources/SwiftDocC/Infrastructure/External Data/OutOfProcessReferenceResolver.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
This source file is part of the Swift.org open source project
33

4-
Copyright (c) 2021 Apple Inc. and the Swift project authors
4+
Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
55
Licensed under Apache License v2.0 with Runtime Library Exception
66

77
See https://swift.org/LICENSE.txt for license information
@@ -175,8 +175,8 @@ public class OutOfProcessReferenceResolver: ExternalReferenceResolver, FallbackR
175175
return DocumentationNode(
176176
reference: reference,
177177
kind: resolvedInformation.kind,
178-
sourceLanguage: .init(name: resolvedInformation.language.name, id: resolvedInformation.language.id),
179-
availableSourceLanguages: Set(resolvedInformation.availableLanguages.map { .init(name: $0.name, id: $0.id) }),
178+
sourceLanguage: resolvedInformation.language,
179+
availableSourceLanguages: sourceLanguages(for: resolvedInformation),
180180
name: name,
181181
markup: Document(parsing: resolvedInformation.abstract, options: []),
182182
semantic: maybeSymbol,
@@ -396,7 +396,7 @@ public class OutOfProcessReferenceResolver: ExternalReferenceResolver, FallbackR
396396
}
397397

398398
// Fall back to the `language` property if `availableLanguages` is empty.
399-
return [SourceLanguage(name: resolvedInformation.language.name, id: resolvedInformation.language.id)]
399+
return [resolvedInformation.language]
400400
}
401401
}
402402

Tests/SwiftDocCUtilitiesTests/OutOfProcessReferenceResolverTests.swift

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
This source file is part of the Swift.org open source project
33

4-
Copyright (c) 2021 Apple Inc. and the Swift project authors
4+
Copyright (c) 2021-2022 Apple Inc. and the Swift project authors
55
Licensed under Apache License v2.0 with Runtime Library Exception
66

77
See https://swift.org/LICENSE.txt for license information
@@ -64,6 +64,7 @@ class OutOfProcessReferenceResolverTests: XCTestCase {
6464
availableLanguages: [
6565
.swift,
6666
.init(name: "Language Name 2", id: "com.test.another-language.id"),
67+
.objectiveC,
6768
],
6869
platforms: [
6970
.init(name: "fooOS", introduced: "1.2.3", isBeta: false),
@@ -113,24 +114,20 @@ class OutOfProcessReferenceResolverTests: XCTestCase {
113114

114115
XCTAssertEqual(node.name, .symbol(declaration: .init([.plain(testMetadata.title)])))
115116

116-
XCTAssertEqual(node.sourceLanguage.name, testMetadata.language.name)
117-
XCTAssertEqual(node.sourceLanguage.id, testMetadata.language.id)
117+
XCTAssertEqual(node.sourceLanguage, testMetadata.language)
118118

119-
XCTAssertEqual(node.availableSourceLanguages.count, 2)
119+
XCTAssertEqual(node.availableSourceLanguages.count, 3)
120120

121121
let availableSourceLanguages = node.availableSourceLanguages
122122
.sorted(by: { lhs, rhs in lhs.id < rhs.id })
123123
let expectedLanguages = testMetadata.availableLanguages
124124
.sorted(by: { lhs, rhs in lhs.id < rhs.id })
125125

126-
XCTAssertEqual(availableSourceLanguages[0].name, expectedLanguages[0].name)
127-
XCTAssertEqual(availableSourceLanguages[0].id, expectedLanguages[0].id)
128-
129-
XCTAssertEqual(availableSourceLanguages[1].name, expectedLanguages[1].name)
130-
XCTAssertEqual(availableSourceLanguages[1].id, expectedLanguages[1].id)
131-
132-
XCTAssertEqual(node.platformNames?.sorted(), ["barOS", "fooOS"])
126+
XCTAssertEqual(availableSourceLanguages[0], expectedLanguages[0])
127+
XCTAssertEqual(availableSourceLanguages[1], expectedLanguages[1])
128+
XCTAssertEqual(availableSourceLanguages[2], expectedLanguages[2])
133129

130+
XCTAssertEqual(node.platformNames?.sorted(), ["barOS", "fooOS"])
134131

135132
XCTAssertEqual(symbol.subHeading, [.init(kind: .text, spelling: "declaration fragment", preciseIdentifier: nil)])
136133

@@ -226,6 +223,7 @@ class OutOfProcessReferenceResolverTests: XCTestCase {
226223
availableLanguages: [
227224
.swift,
228225
.init(name: "Language Name 2", id: "com.test.another-language.id"),
226+
.objectiveC,
229227
],
230228
platforms: [
231229
.init(name: "fooOS", introduced: "1.2.3", isBeta: false),
@@ -272,20 +270,17 @@ class OutOfProcessReferenceResolverTests: XCTestCase {
272270

273271
XCTAssertEqual(symbolNode.name, .symbol(declaration: .init([.plain(testMetadata.title)])))
274272

275-
XCTAssertEqual(symbolNode.sourceLanguage.name, testMetadata.language.name)
276-
XCTAssertEqual(symbolNode.sourceLanguage.id, testMetadata.language.id)
273+
XCTAssertEqual(symbolNode.sourceLanguage, testMetadata.language)
277274

278-
XCTAssertEqual(symbolNode.availableSourceLanguages.count, 2)
275+
XCTAssertEqual(symbolNode.availableSourceLanguages.count, 3)
279276

280277
let availableSourceLanguages = symbolNode.availableSourceLanguages.sorted(by: { lhs, rhs in lhs.id < rhs.id })
281278
let expectedLanguages = testMetadata.availableLanguages.sorted(by: { lhs, rhs in lhs.id < rhs.id })
282279

283-
XCTAssertEqual(availableSourceLanguages[0].name, expectedLanguages[0].name)
284-
XCTAssertEqual(availableSourceLanguages[0].id, expectedLanguages[0].id)
285-
286-
XCTAssertEqual(availableSourceLanguages[1].name, expectedLanguages[1].name)
287-
XCTAssertEqual(availableSourceLanguages[1].id, expectedLanguages[1].id)
288-
280+
XCTAssertEqual(availableSourceLanguages[0], expectedLanguages[0])
281+
XCTAssertEqual(availableSourceLanguages[1], expectedLanguages[1])
282+
XCTAssertEqual(availableSourceLanguages[2], expectedLanguages[2])
283+
289284
XCTAssertEqual(symbolNode.platformNames?.sorted(), ["barOS", "fooOS"])
290285

291286
XCTAssertEqual(symbol.subHeading, [.init(kind: .text, spelling: "declaration fragment", preciseIdentifier: nil)])

bin/test-data-external-resolver

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,18 @@ RESPONSE='{
2323
"availableLanguages" : [
2424
{
2525
"id" : "swift",
26-
"name" : "Language Name"
26+
"name" : "Language Name",
27+
"idAliases" : [],
28+
"linkDisambiguationID": "swift"
2729
},
2830
{
2931
"id" : "occ",
30-
"name" : "Variant Language Name"
32+
"name" : "Variant Language Name",
33+
"idAliases" : [
34+
"objective-c",
35+
"c"
36+
],
37+
"linkDisambiguationID" : "c"
3138
}
3239
],
3340
"declarationFragments" : [
@@ -43,7 +50,10 @@ RESPONSE='{
4350
},
4451
"language" : {
4552
"id" : "swift",
46-
"name" : "Language Name"
53+
"name" : "Language Name",
54+
"idAliases" : [],
55+
"linkDisambiguationID": "swift"
56+
4757
},
4858
"platforms" : [
4959
{
@@ -70,7 +80,12 @@ RESPONSE='{
7080
},
7181
"language" : {
7282
"id" : "occ",
73-
"name" : "Variant Language Name"
83+
"name" : "Variant Language Name",
84+
"idAliases" : [
85+
"objective-c",
86+
"c"
87+
],
88+
"linkDisambiguationID" : "c"
7489
},
7590
"title" : "Resolved Variant Title",
7691
"traits" : [

0 commit comments

Comments
 (0)