Skip to content

Commit 106d72c

Browse files
smitbarmaseFrGoIs
authored andcommitted
project: Add dynamic capabilities registration for "workspace/didChangeWorkspaceFolders" (zed-industries#37005)
Fixes missing capability registration for "workspace/didChangeWorkspaceFolders". ``` WARN [project::lsp_store] unhandled capability registration: Registration { id: "e288546c-4458-401a-a029-bbba759d5a71", method: "workspace/didChangeWorkspaceFolders", register_options: Some(Object {}) } ``` We already correctly send back events to server on workspace add and remove by checking this capability. https://github.com/zed-industries/zed/blob/cf89691b85e4652093548c0bf8b79d881e26562b/crates/lsp/src/lsp.rs#L1353 https://github.com/zed-industries/zed/blob/cf89691b85e4652093548c0bf8b79d881e26562b/crates/lsp/src/lsp.rs#L1388 Release Notes: - N/A
1 parent 7ad0158 commit 106d72c

File tree

2 files changed

+28
-1
lines changed

2 files changed

+28
-1
lines changed

crates/lsp/src/lsp.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1383,7 +1383,8 @@ impl LanguageServer {
13831383
self.notify::<DidChangeWorkspaceFolders>(&params).ok();
13841384
}
13851385
}
1386-
/// Add new workspace folder to the list.
1386+
1387+
/// Remove existing workspace folder from the list.
13871388
pub fn remove_workspace_folder(&self, uri: Url) {
13881389
if self
13891390
.capabilities()

crates/project/src/lsp_store.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11702,6 +11702,20 @@ impl LspStore {
1170211702
"workspace/didChangeConfiguration" => {
1170311703
// Ignore payload since we notify clients of setting changes unconditionally, relying on them pulling the latest settings.
1170411704
}
11705+
"workspace/didChangeWorkspaceFolders" => {
11706+
// In this case register options is an empty object, we can ignore it
11707+
let caps = lsp::WorkspaceFoldersServerCapabilities {
11708+
supported: Some(true),
11709+
change_notifications: Some(OneOf::Right(reg.id)),
11710+
};
11711+
server.update_capabilities(|capabilities| {
11712+
capabilities
11713+
.workspace
11714+
.get_or_insert_default()
11715+
.workspace_folders = Some(caps);
11716+
});
11717+
notify_server_capabilities_updated(&server, cx);
11718+
}
1170511719
"workspace/symbol" => {
1170611720
let options = parse_register_capabilities(reg)?;
1170711721
server.update_capabilities(|capabilities| {
@@ -11944,6 +11958,18 @@ impl LspStore {
1194411958
"workspace/didChangeConfiguration" => {
1194511959
// Ignore payload since we notify clients of setting changes unconditionally, relying on them pulling the latest settings.
1194611960
}
11961+
"workspace/didChangeWorkspaceFolders" => {
11962+
server.update_capabilities(|capabilities| {
11963+
capabilities
11964+
.workspace
11965+
.get_or_insert_with(|| lsp::WorkspaceServerCapabilities {
11966+
workspace_folders: None,
11967+
file_operations: None,
11968+
})
11969+
.workspace_folders = None;
11970+
});
11971+
notify_server_capabilities_updated(&server, cx);
11972+
}
1194711973
"workspace/symbol" => {
1194811974
server.update_capabilities(|capabilities| {
1194911975
capabilities.workspace_symbol_provider = None

0 commit comments

Comments
 (0)