@@ -68,25 +68,43 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
68
68
UpdateInsidersAccess ( ) ;
69
69
70
70
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
+ }
73
77
}
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 ;
88
90
}
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
+ }
90
108
91
109
if ( vscode . workspace . workspaceFolders && vscode . workspace . workspaceFolders . length > 0 ) {
92
110
for ( let i : number = 0 ; i < vscode . workspace . workspaceFolders . length ; ++ i ) {
@@ -114,7 +132,7 @@ export async function activate(context: vscode.ExtensionContext): Promise<CppToo
114
132
}
115
133
} ) ;
116
134
117
- if ( settings . intelliSenseEngine !== "Disabled" ) {
135
+ if ( shouldActivateLanguageServer ) {
118
136
await LanguageServer . activate ( ) ;
119
137
}
120
138
0 commit comments