From 12f6ad32c2108efb1492df6192a1f8cdd5eafa76 Mon Sep 17 00:00:00 2001 From: Nayeem Rahman Date: Sat, 2 Sep 2023 16:36:04 +0100 Subject: fix(lsp): properly handle disabled configuration requests (#20358) Fixes #19802. Properly respect when clients do not have the `workspace/configuration` capability, a.k.a. when an editor cannot provide scoped settings on request from the LSP. - Fix one spot where we weren't checking for the capability before sending this request. - For `enablePaths`, fall back to the settings passed in the initialization options in more cases. - Respect the `workspace/configuration` capability in the test harness client. See: https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_configuration. --- test_util/src/lsp.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'test_util/src') diff --git a/test_util/src/lsp.rs b/test_util/src/lsp.rs index 8a1f24b32..5369d6361 100644 --- a/test_util/src/lsp.rs +++ b/test_util/src/lsp.rs @@ -591,6 +591,7 @@ impl LspClientBuilder { writer, deno_dir, stderr_lines_rx, + supports_workspace_configuration: false, }) } } @@ -604,6 +605,7 @@ pub struct LspClient { deno_dir: TempDir, context: TestContext, stderr_lines_rx: Option>, + supports_workspace_configuration: bool, } impl Drop for LspClient { @@ -689,9 +691,17 @@ impl LspClient { let mut builder = InitializeParamsBuilder::new(); builder.set_root_uri(self.context.temp_dir().uri()); do_build(&mut builder); - self.write_request("initialize", builder.build()); + let params: InitializeParams = builder.build(); + self.supports_workspace_configuration = match ¶ms.capabilities.workspace + { + Some(workspace) => workspace.configuration == Some(true), + _ => false, + }; + self.write_request("initialize", params); self.write_notification("initialized", json!({})); - self.handle_configuration_request(config); + if self.supports_workspace_configuration { + self.handle_configuration_request(config); + } } pub fn did_open(&mut self, params: Value) -> CollectedDiagnostics { @@ -712,7 +722,9 @@ impl LspClient { config: Value, ) -> CollectedDiagnostics { self.did_open_raw(params); - self.handle_configuration_request(config); + if self.supports_workspace_configuration { + self.handle_configuration_request(config); + } self.read_diagnostics() } -- cgit v1.2.3