@@ -117,6 +117,7 @@ const InactiveRegionNotification: NotificationType<InactiveRegionParams, void>
117
117
118
118
const maxSettingLengthForTelemetry : number = 50 ;
119
119
let previousCppSettings : { [ key : string ] : any } = { } ;
120
+ let failureMessageShown : boolean = false ;
120
121
121
122
/**
122
123
* track settings changes for telemetry
@@ -262,7 +263,6 @@ class DefaultClient implements Client {
262
263
private outputChannel : vscode . OutputChannel ;
263
264
private debugChannel : vscode . OutputChannel ;
264
265
private crashTimes : number [ ] = [ ] ;
265
- private failureMessageShown = new PersistentState < boolean > ( "DefaultClient.failureMessageShown" , false ) ;
266
266
private isSupported : boolean = true ;
267
267
private inactiveRegionsDecorations = new Map < string , DecorationRangesPair > ( ) ;
268
268
@@ -335,23 +335,29 @@ class DefaultClient implements Client {
335
335
// Once this is set, we don't defer any more callbacks.
336
336
this . languageClient = languageClient ;
337
337
telemetry . logLanguageServerEvent ( "NonDefaultInitialCppSettings" , getNonDefaultSettings ( this . RootUri ) ) ;
338
- this . failureMessageShown . Value = false ;
338
+ failureMessageShown = false ;
339
339
340
340
// Listen for messages from the language server.
341
341
this . registerNotifications ( ) ;
342
342
this . registerFileWatcher ( ) ;
343
- } , ( ) => {
343
+ } , ( err ) => {
344
344
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 ) ) ;
348
348
}
349
349
} ) ;
350
- } catch {
350
+ } catch ( err ) {
351
351
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 ) ;
355
361
}
356
362
}
357
363
}
0 commit comments