From e5ab51e28e0fb543ea186aed44613e33a711bdbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20R=C3=B6nnqvist?= Date: Mon, 20 Oct 2025 17:28:29 +0200 Subject: [PATCH] Avoid full URL parsing to trim a known prefix from a reference string rdar://162860967 --- .../External Data/OutOfProcessReferenceResolver.swift | 5 ++++- .../OutOfProcessReferenceResolverV2Tests.swift | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Sources/SwiftDocC/Infrastructure/External Data/OutOfProcessReferenceResolver.swift b/Sources/SwiftDocC/Infrastructure/External Data/OutOfProcessReferenceResolver.swift index 566f50fe7..25523e652 100644 --- a/Sources/SwiftDocC/Infrastructure/External Data/OutOfProcessReferenceResolver.swift +++ b/Sources/SwiftDocC/Infrastructure/External Data/OutOfProcessReferenceResolver.swift @@ -411,7 +411,10 @@ extension OutOfProcessReferenceResolver { return .success( makeReference(for: cachedSummary) ) } - let linkString = unresolvedReference.topicURL.url.withoutHostAndPortAndScheme().standardized.absoluteString + let linkString = String( + unresolvedReferenceString.dropFirst(6) // "doc://" + .drop(while: { $0 != "/" }) // the known identifier (host component) + ) let response: ResponseV2 = try longRunningProcess.sendAndWait(request: RequestV2.link(linkString)) switch response { diff --git a/Tests/SwiftDocCTests/OutOfProcessReferenceResolverV2Tests.swift b/Tests/SwiftDocCTests/OutOfProcessReferenceResolverV2Tests.swift index b4a5aa1b3..e4e42b500 100644 --- a/Tests/SwiftDocCTests/OutOfProcessReferenceResolverV2Tests.swift +++ b/Tests/SwiftDocCTests/OutOfProcessReferenceResolverV2Tests.swift @@ -531,6 +531,9 @@ class OutOfProcessReferenceResolverV2Tests: XCTestCase { read # Wait for 3rd request echo $REPLY >> \(savedRequestsFile.path) # Save the raw request echo '{"failure":"ignored error message"}' # Respond + read # Wait for 4th request + echo $REPLY >> \(savedRequestsFile.path) # Save the raw request + echo '{"failure":"ignored error message"}' # Respond """.write(to: executableLocation, atomically: true, encoding: .utf8) // `0o0700` is `-rwx------` (read, write, & execute only for owner) @@ -544,10 +547,11 @@ class OutOfProcessReferenceResolverV2Tests: XCTestCase { TextFile(name: "Something.md", utf8Content: """ # My root page - This page contains an 3 external links hat will fail to resolve: + This page contains an 4 external links that will fail to resolve: - - - + - """) ]) let inputDirectory = Folder(name: "path", content: [Folder(name: "to", content: [catalog])]) @@ -568,6 +572,7 @@ class OutOfProcessReferenceResolverV2Tests: XCTestCase { XCTAssertEqual(readRequests, """ {"link":"/some-link"} {"link":"/path/to/some-link"} + {"link":"//not-parsable-as-url"} {"link":"/path/to/some-link#some-fragment"} """) }