Skip to content

Commit 2b70557

Browse files
committed
Display the error description of a language server error in the host app
1 parent efed398 commit 2b70557

1 file changed

Lines changed: 70 additions & 8 deletions

File tree

Tool/Sources/GitHubCopilotService/GitHubCopilotService.swift

Lines changed: 70 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,43 @@ protocol GitHubCopilotLSP {
4343

4444
enum GitHubCopilotError: Error, LocalizedError {
4545
case languageServerNotInstalled
46+
case languageServerError(ServerError)
4647

4748
var errorDescription: String? {
4849
switch self {
4950
case .languageServerNotInstalled:
5051
return "Language server is not installed."
52+
case let .languageServerError(error):
53+
switch error {
54+
case let .handlerUnavailable(handler):
55+
return "Language server error: Handler \(handler) unavailable"
56+
case let .unhandledMethod(method):
57+
return "Language server error: Unhandled method \(method)"
58+
case let .notificationDispatchFailed(error):
59+
return "Language server error: Notification dispatch failed: \(error)"
60+
case let .requestDispatchFailed(error):
61+
return "Language server error: Request dispatch failed: \(error)"
62+
case let .clientDataUnavailable(error):
63+
return "Language server error: Client data unavailable: \(error)"
64+
case .serverUnavailable:
65+
return "Language server error: Server unavailable, please make sure that:\n1. The path is node is correctly set.\n2. The node is not a shim executable.\n3. the node version is high enough."
66+
case .missingExpectedParameter:
67+
return "Language server error: Missing expected parameter"
68+
case .missingExpectedResult:
69+
return "Language server error: Missing expected result"
70+
case let .unableToDecodeRequest(error):
71+
return "Language server error: Unable to decode request: \(error)"
72+
case let .unableToSendRequest(error):
73+
return "Language server error: Unable to send request: \(error)"
74+
case let .unableToSendNotification(error):
75+
return "Language server error: Unable to send notification: \(error)"
76+
case let .serverError(code: code, message: message, data: data):
77+
return "Language server error: Server error: \(code) \(message) \(String(describing: data))"
78+
case .invalidRequest:
79+
return "Language server error: Invalid request"
80+
case .timeout:
81+
return "Language server error: Timeout, please try again later"
82+
}
5183
}
5284
}
5385
}
@@ -228,28 +260,58 @@ public final class GitHubCopilotAuthService: GitHubCopilotBaseService,
228260
}
229261

230262
public func checkStatus() async throws -> GitHubCopilotAccountStatus {
231-
try await server.sendRequest(GitHubCopilotRequest.CheckStatus()).status
263+
do {
264+
return try await server.sendRequest(GitHubCopilotRequest.CheckStatus()).status
265+
} catch let error as ServerError {
266+
throw GitHubCopilotError.languageServerError(error)
267+
} catch {
268+
throw error
269+
}
232270
}
233271

234272
public func signInInitiate() async throws -> (verificationUri: String, userCode: String) {
235-
let result = try await server.sendRequest(GitHubCopilotRequest.SignInInitiate())
236-
return (result.verificationUri, result.userCode)
273+
do {
274+
let result = try await server.sendRequest(GitHubCopilotRequest.SignInInitiate())
275+
return (result.verificationUri, result.userCode)
276+
} catch let error as ServerError {
277+
throw GitHubCopilotError.languageServerError(error)
278+
} catch {
279+
throw error
280+
}
237281
}
238282

239283
public func signInConfirm(userCode: String) async throws
240284
-> (username: String, status: GitHubCopilotAccountStatus)
241285
{
242-
let result = try await server
243-
.sendRequest(GitHubCopilotRequest.SignInConfirm(userCode: userCode))
244-
return (result.user, result.status)
286+
do {
287+
let result = try await server
288+
.sendRequest(GitHubCopilotRequest.SignInConfirm(userCode: userCode))
289+
return (result.user, result.status)
290+
} catch let error as ServerError {
291+
throw GitHubCopilotError.languageServerError(error)
292+
} catch {
293+
throw error
294+
}
245295
}
246296

247297
public func signOut() async throws -> GitHubCopilotAccountStatus {
248-
try await server.sendRequest(GitHubCopilotRequest.SignOut()).status
298+
do {
299+
return try await server.sendRequest(GitHubCopilotRequest.SignOut()).status
300+
} catch let error as ServerError {
301+
throw GitHubCopilotError.languageServerError(error)
302+
} catch {
303+
throw error
304+
}
249305
}
250306

251307
public func version() async throws -> String {
252-
try await server.sendRequest(GitHubCopilotRequest.GetVersion()).version
308+
do {
309+
return try await server.sendRequest(GitHubCopilotRequest.GetVersion()).version
310+
} catch let error as ServerError {
311+
throw GitHubCopilotError.languageServerError(error)
312+
} catch {
313+
throw error
314+
}
253315
}
254316
}
255317

0 commit comments

Comments
 (0)