From a54c7094251cb9008d58093a609f1eac902052ec Mon Sep 17 00:00:00 2001 From: Alex Hoppen Date: Thu, 12 Dec 2024 16:32:23 -0800 Subject: [PATCH] When a sourcekitd diagnostics request fails, show the request error as a diagnostic on the source file The missing diagnostics might be due to an error that the user can fix. Report it to them. Fixes #1812 rdar://139514623 --- .../Swift/DiagnosticReportManager.swift | 26 +++++++++++++++---- .../PullDiagnosticsTests.swift | 26 +++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift b/Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift index 2ddb8f0fa..1b9e4c299 100644 --- a/Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift +++ b/Sources/SourceKitLSP/Swift/DiagnosticReportManager.swift @@ -110,11 +110,27 @@ actor DiagnosticReportManager { keys.compilerArgs: compilerArgs as [SKDRequestValue], ]) - let dict = try await self.sourcekitd.send( - skreq, - timeout: options.sourcekitdRequestTimeoutOrDefault, - fileContents: snapshot.text - ) + let dict: SKDResponseDictionary + do { + dict = try await self.sourcekitd.send( + skreq, + timeout: options.sourcekitdRequestTimeoutOrDefault, + fileContents: snapshot.text + ) + } catch SKDError.requestFailed(let sourcekitdError) { + var errorMessage = sourcekitdError + if errorMessage.hasPrefix("error response (Request Failed): error: ") { + errorMessage = String(errorMessage.dropFirst(40)) + } + return RelatedFullDocumentDiagnosticReport(items: [ + Diagnostic( + range: Position(line: 0, utf16index: 0)..