Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ public struct ConvertService: DocumentationService {
// Enable support for generating documentation for standalone articles and tutorials.
context.allowsRegisteringArticlesWithoutTechnologyRoot = true
context.allowsRegisteringUncuratedTutorials = true
context.considerDocumentationExtensionsThatDoNotMatchSymbolsAsResolved = true

context.configureSymbolGraph = { symbolGraph in
for (symbolIdentifier, overridingDocumentationComment) in request.overridingDocumentationComments ?? [:] {
Expand Down Expand Up @@ -252,9 +253,7 @@ public struct ConvertService: DocumentationService {
baseReferenceStore: RenderReferenceStore?
) -> RenderReferenceStore {
let uncuratedArticles = context.uncuratedArticles.map { ($0, isDocumentationExtensionContent: false) }
let uncuratedDocumentationExtensions = context.uncuratedDocumentationExtensions.flatMap { reference, articles in
articles.map { article in ((reference, article), isDocumentationExtensionContent: true) }
}
let uncuratedDocumentationExtensions = context.uncuratedDocumentationExtensions.map { ($0, isDocumentationExtensionContent: true) }
let topicContent = (uncuratedArticles + uncuratedDocumentationExtensions)
.compactMap { (value, isDocumentationExtensionContent) -> (ResolvedTopicReference, RenderReferenceStore.TopicContent)? in
let (topicReference, article) = value
Expand Down
241 changes: 185 additions & 56 deletions Sources/SwiftDocC/Infrastructure/DocumentationContext.swift

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,11 @@ final class PathHierarchyBasedLinkResolver {
return pathHierarchy.topLevelSymbols().map { resolvedReferenceMap[$0]! }
}

/// Returns a list of all module symbols.
func modules() -> [ResolvedTopicReference] {
return pathHierarchy.modules.values.map { resolvedReferenceMap[$0.identifier]! }
}

// MARK: - Adding non-symbols

/// Map the resolved identifiers to resolved topic references for a given bundle's article, tutorial, and technology root pages.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ enum GeneratedDocumentationTopics {
var collectionArticle: Article

// Find matching doc extension or create an empty article.
if let docExtensionMatch = context.uncuratedDocumentationExtensions[collectionReference]?.first?.value {
if let docExtensionMatch = context.uncuratedDocumentationExtensions[collectionReference]?.value {
collectionArticle = docExtensionMatch
collectionArticle.title = Heading(level: 1, Text(title))
context.uncuratedDocumentationExtensions.removeValue(forKey: collectionReference)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1221,6 +1221,9 @@ class ConvertServiceTests: XCTestCase {
assert: { renderNodes, referenceStore in
let referenceStore = try XCTUnwrap(referenceStore)

// The ConvertService relies on old implementation detail where documentation extension files were always considered "resolved" even when they didn't match a symbol. (rdar://108563483)
// https://github.com/apple/swift-docc/issues/567

XCTAssertEqual(
Set(referenceStore.topics.keys.map(\.path)),
[
Expand All @@ -1245,7 +1248,6 @@ class ConvertServiceTests: XCTestCase {
"/documentation/Test-Bundle/Default-Code-Listing-Syntax",
]
)

try self.assertReferenceStoreContains(
referenceStore: referenceStore,
topicPath: "/documentation/MyKit/MyClass",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,10 +88,12 @@ class DocumentationContext_RootPageTests: XCTestCase {
try workspace.registerProvider(dataProvider)

// Verify that we emit a warning when trying to make a symbol a root page
XCTAssertTrue(context.problems.contains(where: { problem -> Bool in
return problem.diagnostic.identifier == "org.swift.docc.UnexpectedTechnologyRoot"
&& problem.diagnostic.source?.path == "ReleaseNotes/MyClass"
}))
let technologyRootProblem = try XCTUnwrap(context.problems.first(where: { $0.diagnostic.identifier == "org.swift.docc.UnexpectedTechnologyRoot" }))
XCTAssertEqual(technologyRootProblem.diagnostic.source, tempFolderURL.appendingPathComponent("no-sgf-test.docc").appendingPathComponent("MyClass.md"))
XCTAssertEqual(technologyRootProblem.diagnostic.range?.lowerBound.line, 3)
let solution = try XCTUnwrap(technologyRootProblem.possibleSolutions.first)
XCTAssertEqual(solution.replacements.first?.range.lowerBound.line, 3)
XCTAssertEqual(solution.replacements.first?.range.upperBound.line, 3)
}

}
Loading