@@ -117,6 +117,7 @@ const InactiveRegionNotification: NotificationType<InactiveRegionParams, void>
117117
118118const maxSettingLengthForTelemetry : number = 50 ;
119119let 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