Skip to content

Commit e6ca874

Browse files
authored
Merge pull request #2086 from ahoppen/generated-interface-diags
Don’t return diagnostics for generated interfaces
2 parents 5575e90 + 686c225 commit e6ca874

File tree

2 files changed

+38
-0
lines changed

2 files changed

+38
-0
lines changed

Sources/SourceKitLSP/Swift/SwiftLanguageService.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1058,6 +1058,13 @@ extension SwiftLanguageService {
10581058

10591059
package func documentDiagnostic(_ req: DocumentDiagnosticsRequest) async throws -> DocumentDiagnosticReport {
10601060
do {
1061+
switch try? ReferenceDocumentURL(from: req.textDocument.uri) {
1062+
case .generatedInterface:
1063+
// Generated interfaces don't have diagnostics associated with them.
1064+
return .full(RelatedFullDocumentDiagnosticReport(items: []))
1065+
case .macroExpansion, nil: break
1066+
}
1067+
10611068
await semanticIndexManager?.prepareFileForEditorFunctionality(
10621069
req.textDocument.uri.buildSettingsFile
10631070
)

Tests/SourceKitLSPTests/SwiftInterfaceTests.swift

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,37 @@ final class SwiftInterfaceTests: XCTestCase {
288288
linePrefix: "@inlinable public func filter(_ isIncluded: (Element) throws -> Bool) rethrows -> [Element]"
289289
)
290290
}
291+
292+
func testNoDiagnosticsInGeneratedInterface() async throws {
293+
let testClient = try await TestSourceKitLSPClient(
294+
capabilities: ClientCapabilities(experimental: [
295+
"workspace/getReferenceDocument": .bool(true)
296+
])
297+
)
298+
let uri = DocumentURI(for: .swift)
299+
300+
let positions = testClient.openDocument(
301+
"""
302+
func test(x: 1️⃣String) {}
303+
""",
304+
uri: uri
305+
)
306+
307+
let definition = try await testClient.send(
308+
DefinitionRequest(textDocument: TextDocumentIdentifier(uri), position: positions["1️⃣"])
309+
)
310+
let interfaceUri = try XCTUnwrap(definition?.locations?.only?.uri)
311+
let interfaceContents = try await testClient.send(GetReferenceDocumentRequest(uri: interfaceUri))
312+
testClient.send(
313+
DidOpenTextDocumentNotification(
314+
textDocument: TextDocumentItem(uri: interfaceUri, language: .swift, version: 0, text: interfaceContents.content)
315+
)
316+
)
317+
let diagnostics = try await testClient.send(
318+
DocumentDiagnosticsRequest(textDocument: TextDocumentIdentifier(interfaceUri))
319+
)
320+
XCTAssertEqual(diagnostics.fullReport?.items, [])
321+
}
291322
}
292323

293324
private func assertSystemSwiftInterface(

0 commit comments

Comments
 (0)