diff options
author | Kitson Kelly <me@kitsonkelly.com> | 2021-06-01 19:24:36 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-01 19:24:36 +1000 |
commit | 9abb899f5fd36da65aae78351df3f478f8363700 (patch) | |
tree | 8948798d0e38eee9ebcdf6ecdd578e01f215bdd5 /cli/lsp/language_server.rs | |
parent | e466a6fc9ade08c8ca17322d47017709eecc4444 (diff) |
fix(lsp): updates to workspace config are processed sync (#10812)
Diffstat (limited to 'cli/lsp/language_server.rs')
-rw-r--r-- | cli/lsp/language_server.rs | 42 |
1 files changed, 30 insertions, 12 deletions
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); } } |