diff --git a/src/sourcekit-lsp/LanguageClientManager.ts b/src/sourcekit-lsp/LanguageClientManager.ts index 7e568e833..01e137d13 100644 --- a/src/sourcekit-lsp/LanguageClientManager.ts +++ b/src/sourcekit-lsp/LanguageClientManager.ts @@ -289,7 +289,13 @@ export class LanguageClientManager implements vscode.Disposable { const uri = folder.folder; if (this.languageClient === undefined) { this.currentWorkspaceFolder = folder; - this.restartedPromise = this.setupLanguageClient(folder); + this.restartedPromise = this.setupLanguageClient(folder).catch(reason => { + this.folderContext.workspaceContext.logger.error( + Error("Error starting SourceKit-LSP in setLanguageClientFolder", { + cause: reason, + }) + ); + }); return; } else { // don't check for undefined uri's or if the current workspace is the same if we are @@ -368,9 +374,18 @@ export class LanguageClientManager implements vscode.Disposable { client.outputChannel.dispose(); }) .catch(async reason => { + this.folderContext.workspaceContext.logger.error( + `Error starting SourceKit-LSP in restartLanguageClient: ${reason}` + ); // error message matches code here https://github.com/microsoft/vscode-languageserver-node/blob/2041784436fed53f4e77267a49396bca22a7aacf/client/src/common/client.ts#L1409C1-L1409C54 if (reason.message === "Stopping the server timed out") { - await this.setupLanguageClient(workspaceFolder); + try { + await this.setupLanguageClient(workspaceFolder); + } catch (reason) { + this.folderContext.workspaceContext.logger.error( + `Error starting SourceKit-LSP after server timeout in restartLanguageClient: ${reason}` + ); + } } this.folderContext.workspaceContext.logger.error(reason); }); @@ -488,7 +503,10 @@ export class LanguageClientManager implements vscode.Disposable { }; } - private async startClient(client: LanguageClient, errorHandler: SourceKitLSPErrorHandler) { + private startClient( + client: LanguageClient, + errorHandler: SourceKitLSPErrorHandler + ): Promise { const runningPromise = new Promise((res, rej) => { const disposable = client.onDidChangeState(e => { // if state is now running add in any sub-folder workspaces that @@ -550,7 +568,7 @@ export class LanguageClientManager implements vscode.Disposable { } } catch (reason) { this.folderContext.workspaceContext.logger.error( - `Error starting SourceKit-LSP: ${reason}` + `Error starting SourceKit-LSP in startClient: ${reason}` ); if (this.languageClient?.state === State.Running) { await this.languageClient?.stop();