diff options
author | Nayeem Rahman <nayeemrmn99@gmail.com> | 2023-09-02 16:36:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-02 16:36:04 +0100 |
commit | 12f6ad32c2108efb1492df6192a1f8cdd5eafa76 (patch) | |
tree | 8afd5f0a4890f62eba658850e294663540e949c4 /test_util/src | |
parent | 83426be6eead06c680ae527468aeaf8723543ff2 (diff) |
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.
Diffstat (limited to 'test_util/src')
-rw-r--r-- | test_util/src/lsp.rs | 18 |
1 files changed, 15 insertions, 3 deletions
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<mpsc::Receiver<String>>, + 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() } |