@@ -234,22 +234,31 @@ function watchLanguageServerConfiguration(e: vscode.ConfigurationChangeEvent) {
234
234
}
235
235
236
236
const config = parseLanguageServerConfig ( ) ;
237
+ let shouldRestartServer : boolean ;
237
238
let reloadMessage : string ;
238
239
239
- // If the user has disabled or enabled the language server.
240
+ // If the user enabled the language server, we just need to start it .
240
241
if ( e . affectsConfiguration ( 'go.useLanguageServer' ) ) {
241
242
if ( config . enabled ) {
242
- reloadMessage = 'Reload VS Code window to enable the use of language server' ;
243
+ shouldRestartServer = true ;
243
244
} else {
244
- reloadMessage = 'Reload VS Code window to disable the use of language server' ;
245
+ // If the user has disabled the language server, we will need to
246
+ // reactivate the extension to register the correct providers,
247
+ // so suggest a full VS Code reload.
248
+ reloadMessage = 'Reload VS Code window to disable the use of language server.' ;
245
249
}
246
250
}
247
251
248
- if (
249
- e . affectsConfiguration ( 'go.languageServerFlags' ) ||
250
- e . affectsConfiguration ( 'go.languageServerExperimentalFeatures' )
251
- ) {
252
- reloadMessage = 'Reload VS Code window for the changes in language server settings to take effect' ;
252
+ // If the flags to the language server have changed,
253
+ // all that's necessary is a server restart.
254
+ if ( e . affectsConfiguration ( 'go.languageServerFlags' ) ) {
255
+ // TODO(rstambler): This should be doable by creating a new client.
256
+ reloadMessage = 'Reload VS Code window for changes in the language server flags to take effect.' ;
257
+ }
258
+ // If the features provided by the language server have changed,
259
+ // the extensions requires a full reactivation.
260
+ if ( e . affectsConfiguration ( 'go.languageServerExperimentalFeatures' ) ) {
261
+ reloadMessage = 'Reload VS Code window for the changes in language server features to take effect.' ;
253
262
}
254
263
255
264
// If there was a change in the configuration of the language server,
@@ -260,6 +269,8 @@ function watchLanguageServerConfiguration(e: vscode.ConfigurationChangeEvent) {
260
269
vscode . commands . executeCommand ( 'workbench.action.reloadWindow' ) ;
261
270
}
262
271
} ) ;
272
+ } else if ( shouldRestartServer ) {
273
+ vscode . commands . executeCommand ( 'go.languageserver.restart' ) ;
263
274
}
264
275
}
265
276
@@ -329,13 +340,12 @@ export function getLanguageServerToolPath(): string {
329
340
// Only gopls and go-langserver are supported.
330
341
if ( languageServerOfChoice !== 'gopls' && languageServerOfChoice !== 'go-langserver' ) {
331
342
vscode . window . showErrorMessage (
332
- `Cannot find the language server ${ languageServerOfChoice } . Please install it and reload this VS Code window `
343
+ `Cannot find the language server ${ languageServerOfChoice } . Please install it. `
333
344
) ;
334
345
return ;
335
346
}
336
347
// Otherwise, prompt the user to install the language server.
337
348
promptForMissingTool ( languageServerOfChoice ) ;
338
- vscode . window . showInformationMessage ( 'Reload VS Code window after installing the Go language server.' ) ;
339
349
}
340
350
341
351
function allFoldersHaveSameGopath ( ) : boolean {
0 commit comments