Skip to content

Commit fa53b98

Browse files
committed
Add variants APIs for multi-language symbols
Adds APIs for specifying different variants for fields of the Symbol API in support of documenting symbols that are available in multiple languages, for example Swift and Objective-C. rdar://83665056
1 parent 87263a1 commit fa53b98

File tree

8 files changed

+717
-271
lines changed

8 files changed

+717
-271
lines changed

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

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -752,25 +752,25 @@ extension OutOfProcessReferenceResolver {
752752
}
753753

754754
return Symbol(
755-
kind: symbolKind(forNodeKind: kind),
756-
title: title,
757-
subHeading: declarationFragments?.declarationFragments,
758-
navigator: nil,
759-
roleHeading: "", // This information isn't used anywhere since this node doesn't have its own page, it's just referenced from other pages.
760-
platformName: nil,
761-
moduleName: "", // This information isn't used anywhere since the `urlForResolvedReference(reference:)` specifies the URL for this node.
762-
externalID: nil,
763-
accessLevel: nil,
764-
availability: availability,
765-
deprecatedSummary: nil,
766-
mixins: nil,
767-
abstractSection: nil,
768-
discussion: nil,
769-
topics: nil,
770-
seeAlso: nil,
771-
returnsSection: nil,
772-
parametersSection: nil,
773-
redirects: nil
755+
kindVariants: .init(swiftVariant: symbolKind(forNodeKind: kind)),
756+
titleVariants: .init(swiftVariant: title),
757+
subHeadingVariants: .init(swiftVariant: declarationFragments?.declarationFragments),
758+
navigatorVariants: .init(swiftVariant: nil),
759+
roleHeadingVariants: .init(swiftVariant: ""), // This information isn't used anywhere since this node doesn't have its own page, it's just referenced from other pages.
760+
platformNameVariants: .init(swiftVariant: nil),
761+
moduleNameVariants: .init(swiftVariant: ""), // This information isn't used anywhere since the `urlForResolvedReference(reference:)` specifies the URL for this node.
762+
externalIDVariants: .init(swiftVariant: nil),
763+
accessLevelVariants: .init(swiftVariant: nil),
764+
availabilityVariants: .init(swiftVariant: availability),
765+
deprecatedSummaryVariants: .init(swiftVariant: nil),
766+
mixinsVariants: .init(swiftVariant: nil),
767+
abstractSectionVariants: .init(swiftVariant: nil),
768+
discussionVariants: .init(swiftVariant: nil),
769+
topicsVariants: .init(swiftVariant: nil),
770+
seeAlsoVariants: .init(swiftVariant: nil),
771+
returnsSectionVariants: .init(swiftVariant: nil),
772+
parametersSectionVariants: .init(swiftVariant: nil),
773+
redirectsVariants: .init(swiftVariant: nil)
774774
)
775775
}
776776
}

Sources/SwiftDocC/Model/DocumentationNode.swift

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -181,28 +181,28 @@ public struct DocumentationNode {
181181
let extendedModule = (symbol.mixins[SymbolGraph.Symbol.Swift.Extension.mixinKey] as? SymbolGraph.Symbol.Swift.Extension)?.extendedModule
182182

183183
self.semantic = Symbol(
184-
kind: symbol.kind,
185-
title: symbol.names.title,
186-
subHeading: symbol.names.subHeading,
187-
navigator: symbol.names.navigator,
188-
roleHeading: symbol.kind.displayName,
189-
platformName: platformName.map(PlatformName.init(operatingSystemName:)),
190-
moduleName: moduleName,
191-
extendedModule: extendedModule,
192-
externalID: symbol.identifier.precise,
193-
accessLevel: symbol.accessLevel.rawValue,
194-
availability: symbolAvailability,
195-
deprecatedSummary: nil,
196-
mixins: symbol.mixins,
197-
relationships: RelationshipsSection(),
198-
abstractSection: AbstractSection(paragraph: .init([Text("Placeholder Abstract")])),
199-
discussion: nil,
200-
topics: nil,
201-
seeAlso: nil,
202-
returnsSection: nil,
203-
parametersSection: nil,
204-
redirects: nil,
205-
bystanderModuleNames: bystanderModules
184+
kindVariants: .init(swiftVariant: symbol.kind),
185+
titleVariants: .init(swiftVariant: symbol.names.title),
186+
subHeadingVariants: .init(swiftVariant: symbol.names.subHeading),
187+
navigatorVariants: .init(swiftVariant: symbol.names.navigator),
188+
roleHeadingVariants: .init(swiftVariant: symbol.kind.displayName),
189+
platformNameVariants: .init(swiftVariant: platformName.map(PlatformName.init(operatingSystemName:))),
190+
moduleNameVariants: .init(swiftVariant: moduleName),
191+
extendedModuleVariants: .init(swiftVariant: extendedModule),
192+
externalIDVariants: .init(swiftVariant: symbol.identifier.precise),
193+
accessLevelVariants: .init(swiftVariant: symbol.accessLevel.rawValue),
194+
availabilityVariants: .init(swiftVariant: symbolAvailability),
195+
deprecatedSummaryVariants: .init(swiftVariant: nil),
196+
mixinsVariants: .init(swiftVariant: symbol.mixins),
197+
relationshipsVariants: .init(swiftVariant: RelationshipsSection()),
198+
abstractSectionVariants: .init(swiftVariant: AbstractSection(paragraph: .init([Text("Placeholder Abstract")]))),
199+
discussionVariants: .init(swiftVariant: nil),
200+
topicsVariants: .init(swiftVariant: nil),
201+
seeAlsoVariants: .init(swiftVariant: nil),
202+
returnsSectionVariants: .init(swiftVariant: nil),
203+
parametersSectionVariants: .init(swiftVariant: nil),
204+
redirectsVariants: .init(swiftVariant: nil),
205+
bystanderModuleNamesVariants: .init(swiftVariant: bystanderModules)
206206
)
207207
}
208208

@@ -413,27 +413,27 @@ public struct DocumentationNode {
413413
let markupModel = DocumentationMarkup(markup: markup)
414414

415415
self.semantic = Symbol(
416-
kind: symbol.kind,
417-
title: symbol.names.title,
418-
subHeading: symbol.names.subHeading,
419-
navigator: symbol.names.navigator,
420-
roleHeading: symbol.kind.displayName,
421-
platformName: platformName.map(PlatformName.init(operatingSystemName:)),
422-
moduleName: moduleName,
423-
externalID: symbol.identifier.precise,
424-
accessLevel: symbol.accessLevel.rawValue,
425-
availability: symbolAvailability,
426-
deprecatedSummary: deprecated,
427-
mixins: symbol.mixins,
428-
relationships: RelationshipsSection(),
429-
abstractSection: markupModel.abstractSection,
430-
discussion: markupModel.discussionSection,
431-
topics: markupModel.topicsSection,
432-
seeAlso: markupModel.seeAlsoSection,
433-
returnsSection: markupModel.discussionTags.flatMap({ $0.returns.isEmpty ? nil : ReturnsSection(content: $0.returns[0].contents) }),
434-
parametersSection: markupModel.discussionTags.flatMap({ $0.parameters.isEmpty ? nil : ParametersSection(parameters: $0.parameters) }),
435-
redirects: article?.redirects,
436-
bystanderModuleNames: bystanderModules
416+
kindVariants: .init(swiftVariant: symbol.kind),
417+
titleVariants: .init(swiftVariant: symbol.names.title),
418+
subHeadingVariants: .init(swiftVariant: symbol.names.subHeading),
419+
navigatorVariants: .init(swiftVariant: symbol.names.navigator),
420+
roleHeadingVariants: .init(swiftVariant: symbol.kind.displayName),
421+
platformNameVariants: .init(swiftVariant: platformName.map(PlatformName.init(operatingSystemName:))),
422+
moduleNameVariants: .init(swiftVariant: moduleName),
423+
externalIDVariants: .init(swiftVariant: symbol.identifier.precise),
424+
accessLevelVariants: .init(swiftVariant: symbol.accessLevel.rawValue),
425+
availabilityVariants: .init(swiftVariant: symbolAvailability),
426+
deprecatedSummaryVariants: .init(swiftVariant: deprecated),
427+
mixinsVariants: .init(swiftVariant: symbol.mixins),
428+
relationshipsVariants: .init(swiftVariant: RelationshipsSection()),
429+
abstractSectionVariants: .init(swiftVariant: markupModel.abstractSection),
430+
discussionVariants: .init(swiftVariant: markupModel.discussionSection),
431+
topicsVariants: .init(swiftVariant: markupModel.topicsSection),
432+
seeAlsoVariants: .init(swiftVariant: markupModel.seeAlsoSection),
433+
returnsSectionVariants: .init(swiftVariant: markupModel.discussionTags.flatMap({ $0.returns.isEmpty ? nil : ReturnsSection(content: $0.returns[0].contents) })),
434+
parametersSectionVariants: .init(swiftVariant: markupModel.discussionTags.flatMap({ $0.parameters.isEmpty ? nil : ParametersSection(parameters: $0.parameters) })),
435+
redirectsVariants: .init(swiftVariant: article?.redirects),
436+
bystanderModuleNamesVariants: .init(swiftVariant: bystanderModules)
437437
)
438438

439439
updateAnchorSections()

Sources/SwiftDocC/Semantics/ReferenceResolver.swift

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -399,33 +399,33 @@ struct ReferenceResolver: SemanticVisitor {
399399
// or the merged default implementations to the new `Symbol` instance.
400400

401401
return Symbol(
402-
kind: symbol.kind,
403-
title: symbol.title,
404-
subHeading: symbol.subHeading,
405-
navigator: symbol.navigator,
406-
roleHeading: symbol.roleHeading,
407-
platformName: symbol.platformName,
408-
moduleName: symbol.moduleName,
409-
extendedModule: symbol.extendedModule,
410-
required: symbol.isRequired,
411-
externalID: symbol.externalID,
412-
accessLevel: symbol.accessLevel,
413-
availability: symbol.availability,
414-
deprecatedSummary: symbol.deprecatedSummary,
415-
mixins: symbol.mixins,
416-
declaration: symbol.declaration,
417-
defaultImplementations: symbol.defaultImplementations,
418-
relationships: symbol.relationships,
419-
abstractSection: newAbstract,
420-
discussion: newDiscussion,
421-
topics: newTopics,
422-
seeAlso: newSeeAlso,
423-
returnsSection: newReturns,
424-
parametersSection: newParameters,
425-
redirects: symbol.redirects,
426-
bystanderModuleNames: symbol.bystanderModuleNames,
427-
origin: symbol.origin,
428-
automaticTaskGroups: symbol.automaticTaskGroups
402+
kindVariants: .init(swiftVariant: symbol.kind),
403+
titleVariants: .init(swiftVariant: symbol.title),
404+
subHeadingVariants: .init(swiftVariant: symbol.subHeading),
405+
navigatorVariants: .init(swiftVariant: symbol.navigator),
406+
roleHeadingVariants: .init(swiftVariant: symbol.roleHeading),
407+
platformNameVariants: .init(swiftVariant: symbol.platformName),
408+
moduleNameVariants: .init(swiftVariant: symbol.moduleName),
409+
extendedModuleVariants: .init(swiftVariant: symbol.extendedModule),
410+
requiredVariants: .init(swiftVariant: symbol.isRequired),
411+
externalIDVariants: .init(swiftVariant: symbol.externalID),
412+
accessLevelVariants: .init(swiftVariant: symbol.accessLevel),
413+
availabilityVariants: .init(swiftVariant: symbol.availability),
414+
deprecatedSummaryVariants: .init(swiftVariant: symbol.deprecatedSummary),
415+
mixinsVariants: .init(swiftVariant: symbol.mixins),
416+
declarationVariants: .init(swiftVariant: symbol.declaration),
417+
defaultImplementationsVariants: .init(swiftVariant: symbol.defaultImplementations),
418+
relationshipsVariants: .init(swiftVariant: symbol.relationships),
419+
abstractSectionVariants: .init(swiftVariant: newAbstract),
420+
discussionVariants: .init(swiftVariant: newDiscussion),
421+
topicsVariants: .init(swiftVariant: newTopics),
422+
seeAlsoVariants: .init(swiftVariant: newSeeAlso),
423+
returnsSectionVariants: .init(swiftVariant: newReturns),
424+
parametersSectionVariants: .init(swiftVariant: newParameters),
425+
redirectsVariants: .init(swiftVariant: symbol.redirects),
426+
bystanderModuleNamesVariants: .init(swiftVariant: symbol.bystanderModuleNames),
427+
originVariants: .init(swiftVariant: symbol.origin),
428+
automaticTaskGroupsVariants: .init(swiftVariant: symbol.automaticTaskGroups)
429429
)
430430
}
431431

0 commit comments

Comments
 (0)