@@ -68,25 +68,43 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
6868 UpdateInsidersAccess ( ) ;
6969
7070 const settings : CppSettings = new CppSettings ( ( vscode . workspace . workspaceFolders && vscode . workspace . workspaceFolders . length > 0 ) ? vscode . workspace . workspaceFolders [ 0 ] ?. uri : undefined ) ;
71- if ( settings . intelliSenseEngine === "Disabled" ) {
72- languageServiceDisabled = true ;
71+ let isOldMacOs : boolean = false ;
72+ if ( info . platform === 'darwin' ) {
73+ const releaseParts : string [ ] = os . release ( ) . split ( "." ) ;
74+ if ( releaseParts . length >= 1 ) {
75+ isOldMacOs = parseInt ( releaseParts [ 0 ] ) < 16 ;
76+ }
7377 }
74- let currentIntelliSenseEngineValue : string | undefined = settings . intelliSenseEngine ;
75- disposables . push ( vscode . workspace . onDidChangeConfiguration ( ( ) => {
76- const settings : CppSettings = new CppSettings ( ( vscode . workspace . workspaceFolders && vscode . workspace . workspaceFolders . length > 0 ) ? vscode . workspace . workspaceFolders [ 0 ] ?. uri : undefined ) ;
77- if ( ! reloadMessageShown && settings . intelliSenseEngine !== currentIntelliSenseEngineValue ) {
78- if ( currentIntelliSenseEngineValue === "Disabled" ) {
79- // If switching from disabled to enabled, we can continue activation.
80- currentIntelliSenseEngineValue = settings . intelliSenseEngine ;
81- languageServiceDisabled = false ;
82- LanguageServer . activate ( ) ;
83- } else {
84- // We can't deactivate or change engines on the fly, so prompt for window reload.
85- reloadMessageShown = true ;
86- util . promptForReloadWindowDueToSettingsChange ( ) ;
87- }
78+
79+ // Read the setting and determine whether we should activate the language server prior to installing callbacks,
80+ // to ensure there is no potential race condition. LanguageServer.activate() is called near the end of this
81+ // function, to allow any further setup to occur here, prior to activation.
82+ const shouldActivateLanguageServer : boolean = ( settings . intelliSenseEngine !== "Disabled" && ! isOldMacOs ) ;
83+
84+ if ( isOldMacOs ) {
85+ languageServiceDisabled = true ;
86+ vscode . window . showErrorMessage ( localize ( "macos.version.deprecated" , "Versions of the C/C++ extension more recent than {0} require at least macOS version {1}." , "1.9.8" , "10.12" ) ) ;
87+ } else {
88+ if ( settings . intelliSenseEngine === "Disabled" ) {
89+ languageServiceDisabled = true ;
8890 }
89- } ) ) ;
91+ let currentIntelliSenseEngineValue : string | undefined = settings . intelliSenseEngine ;
92+ disposables . push ( vscode . workspace . onDidChangeConfiguration ( ( ) => {
93+ const settings : CppSettings = new CppSettings ( ( vscode . workspace . workspaceFolders && vscode . workspace . workspaceFolders . length > 0 ) ? vscode . workspace . workspaceFolders [ 0 ] ?. uri : undefined ) ;
94+ if ( ! reloadMessageShown && settings . intelliSenseEngine !== currentIntelliSenseEngineValue ) {
95+ if ( currentIntelliSenseEngineValue === "Disabled" ) {
96+ // If switching from disabled to enabled, we can continue activation.
97+ currentIntelliSenseEngineValue = settings . intelliSenseEngine ;
98+ languageServiceDisabled = false ;
99+ LanguageServer . activate ( ) ;
100+ } else {
101+ // We can't deactivate or change engines on the fly, so prompt for window reload.
102+ reloadMessageShown = true ;
103+ util . promptForReloadWindowDueToSettingsChange ( ) ;
104+ }
105+ }
106+ } ) ) ;
107+ }
90108
91109 if ( vscode . workspace . workspaceFolders && vscode . workspace . workspaceFolders . length > 0 ) {
92110 for ( let i : number = 0 ; i < vscode . workspace . workspaceFolders . length ; ++ i ) {
@@ -114,7 +132,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
114132 }
115133 } ) ;
116134
117- if ( settings . intelliSenseEngine !== "Disabled" ) {
135+ if ( shouldActivateLanguageServer ) {
118136 await LanguageServer . activate ( ) ;
119137 }
120138
0 commit comments