Skip to content

Commit 6b37402

Browse files
authored
Merge pull request #63 from CodinGame/fix-connection-retry
Check languageClient status after starting it
2 parents aea86ea + 56b3a40 commit 6b37402

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/languageClient.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,10 @@ export class LanguageClientManager implements LanguageClient {
152152
try {
153153
this.startPromise = this._start()
154154
await this.startPromise
155+
// If the initialize request fails, the start method still returns a resolve promise due to a vscode-languageclient bug
156+
if (!(this.languageClient?.isRunning() ?? false)) {
157+
throw new Error('Language server not running')
158+
}
155159
started = true
156160
} catch (error) {
157161
this.languageClient = undefined
@@ -299,8 +303,12 @@ export class LanguageClientManager implements LanguageClient {
299303
}
300304
case State.Stopped: {
301305
this.updateStatus('closed')
302-
303-
if (state.oldState === State.Running && !this.isDisposed()) {
306+
setTimeout(() => {
307+
// setTimeout is required or the dispose() fails (Client is stopping but no stop promise available.)
308+
void languageClient.dispose()
309+
})
310+
if (state.oldState === State.Running && !this.isDisposed() && this.languageClient === languageClient) {
311+
this.languageClient = undefined
304312
console.info('[LSP] Restarting language client', state)
305313
this.start().catch(error => {
306314
monaco.errorHandler.onUnexpectedError(new Error('[LSP] Language client stopped', {

0 commit comments

Comments
 (0)