Skip to content

Commit 0521bbe

Browse files
authored
additional logging for language server spawn failure (#1895)
* additional logging for language server spawn failure * Show the client failure message once per session instead of once in forever
1 parent 9249e27 commit 0521bbe

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

Extension/src/LanguageServer/client.ts

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ const InactiveRegionNotification: NotificationType<InactiveRegionParams, void>
117117

118118
const maxSettingLengthForTelemetry: number = 50;
119119
let previousCppSettings: { [key: string]: any } = {};
120+
let failureMessageShown: boolean = false;
120121

121122
/**
122123
* track settings changes for telemetry
@@ -262,7 +263,6 @@ class DefaultClient implements Client {
262263
private outputChannel: vscode.OutputChannel;
263264
private debugChannel: vscode.OutputChannel;
264265
private crashTimes: number[] = [];
265-
private failureMessageShown = new PersistentState<boolean>("DefaultClient.failureMessageShown", false);
266266
private isSupported: boolean = true;
267267
private inactiveRegionsDecorations = new Map<string, DecorationRangesPair>();
268268

@@ -335,23 +335,29 @@ class DefaultClient implements Client {
335335
// Once this is set, we don't defer any more callbacks.
336336
this.languageClient = languageClient;
337337
telemetry.logLanguageServerEvent("NonDefaultInitialCppSettings", getNonDefaultSettings(this.RootUri));
338-
this.failureMessageShown.Value = false;
338+
failureMessageShown = false;
339339

340340
// Listen for messages from the language server.
341341
this.registerNotifications();
342342
this.registerFileWatcher();
343-
}, () => {
343+
}, (err) => {
344344
this.isSupported = false; // Running on an OS we don't support yet.
345-
if (!this.failureMessageShown.Value) {
346-
this.failureMessageShown.Value = true;
347-
vscode.window.showErrorMessage("Unable to start the C/C++ language server. IntelliSense features will be disabled.");
345+
if (!failureMessageShown) {
346+
failureMessageShown = true;
347+
vscode.window.showErrorMessage("Unable to start the C/C++ language server. IntelliSense features will be disabled. Error: " + String(err));
348348
}
349349
});
350-
} catch {
350+
} catch (err) {
351351
this.isSupported = false; // Running on an OS we don't support yet.
352-
if (!this.failureMessageShown.Value) {
353-
this.failureMessageShown.Value = true;
354-
vscode.window.showErrorMessage("Unable to start the C/C++ language server. IntelliSense features will be disabled.");
352+
if (!failureMessageShown) {
353+
failureMessageShown = true;
354+
let additionalInfo: string;
355+
if (err.code === "EPERM") {
356+
additionalInfo = `EPERM: Check permissions for '${getLanguageServerFileName()}'`;
357+
} else {
358+
additionalInfo = String(err);
359+
}
360+
vscode.window.showErrorMessage("Unable to start the C/C++ language server. IntelliSense features will be disabled. Error: " + additionalInfo);
355361
}
356362
}
357363
}

0 commit comments

Comments
 (0)