From 9abb899f5fd36da65aae78351df3f478f8363700 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Tue, 1 Jun 2021 19:24:36 +1000 Subject: fix(lsp): updates to workspace config are processed sync (#10812) --- cli/lsp/language_server.rs | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) (limited to 'cli/lsp/language_server.rs') diff --git a/cli/lsp/language_server.rs b/cli/lsp/language_server.rs index ebcb6b9e3..c8b959596 100644 --- a/cli/lsp/language_server.rs +++ b/cli/lsp/language_server.rs @@ -677,18 +677,36 @@ impl Inner { .performance .mark("did_change_configuration", Some(¶ms)); - if self.config.client_capabilities.workspace_configuration { - if let Err(err) = self.config.update_workspace_settings().await { - error!("Error updating workspace settings: {}", err); - } - } else if let Some(config) = params - .settings - .as_object() - .map(|settings| settings.get(SETTINGS_SECTION)) - .flatten() - .cloned() - { - if let Err(err) = self.config.set_workspace_settings(config) { + let maybe_config = + if self.config.client_capabilities.workspace_configuration { + let config_response = self + .client + .configuration(vec![ConfigurationItem { + scope_uri: None, + section: Some(SETTINGS_SECTION.to_string()), + }]) + .await; + if let Err(err) = self.config.update_all_settings().await { + error!("Cannot request updating all settings: {}", err); + } + match config_response { + Ok(value_vec) => value_vec.get(0).cloned(), + Err(err) => { + error!("Error getting workspace configuration: {}", err); + None + } + } + } else { + params + .settings + .as_object() + .map(|settings| settings.get(SETTINGS_SECTION)) + .flatten() + .cloned() + }; + + if let Some(value) = maybe_config { + if let Err(err) = self.config.set_workspace_settings(value) { error!("failed to update settings: {}", err); } } -- cgit v1.2.3