diff --git a/crates/lsp/src/lsp.rs b/crates/lsp/src/lsp.rs index 942225d09837c206f54aa324f9b58ec214f92ba2..1ad89db017bc9a0c6f9009cba8ad22f94a31c65d 100644 --- a/crates/lsp/src/lsp.rs +++ b/crates/lsp/src/lsp.rs @@ -1383,7 +1383,8 @@ impl LanguageServer { self.notify::(¶ms).ok(); } } - /// Add new workspace folder to the list. + + /// Remove existing workspace folder from the list. pub fn remove_workspace_folder(&self, uri: Url) { if self .capabilities() diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index b92d739360e55bff2a156a8e7d0dcd3b58aa1300..ad9d0abf405b18f9048030621e960251057588de 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -11702,6 +11702,20 @@ impl LspStore { "workspace/didChangeConfiguration" => { // Ignore payload since we notify clients of setting changes unconditionally, relying on them pulling the latest settings. } + "workspace/didChangeWorkspaceFolders" => { + // In this case register options is an empty object, we can ignore it + let caps = lsp::WorkspaceFoldersServerCapabilities { + supported: Some(true), + change_notifications: Some(OneOf::Right(reg.id)), + }; + server.update_capabilities(|capabilities| { + capabilities + .workspace + .get_or_insert_default() + .workspace_folders = Some(caps); + }); + notify_server_capabilities_updated(&server, cx); + } "workspace/symbol" => { let options = parse_register_capabilities(reg)?; server.update_capabilities(|capabilities| { @@ -11944,6 +11958,18 @@ impl LspStore { "workspace/didChangeConfiguration" => { // Ignore payload since we notify clients of setting changes unconditionally, relying on them pulling the latest settings. } + "workspace/didChangeWorkspaceFolders" => { + server.update_capabilities(|capabilities| { + capabilities + .workspace + .get_or_insert_with(|| lsp::WorkspaceServerCapabilities { + workspace_folders: None, + file_operations: None, + }) + .workspace_folders = None; + }); + notify_server_capabilities_updated(&server, cx); + } "workspace/symbol" => { server.update_capabilities(|capabilities| { capabilities.workspace_symbol_provider = None