From 7b907c088513a7bcc3f060d77b0b12c757a3a1f3 Mon Sep 17 00:00:00 2001 From: Hong Jiarong Date: Fri, 24 Jul 2026 19:52:38 +0800 Subject: [PATCH] fix(lsp): correct WorkspaceClientCapabilities diagnostic field name Patch lsp-types via [patch.crates-io] to rename the WorkspaceClientCapabilities.diagnostic field to diagnostics, matching the LSP specification. The misnamed field never deserialized, leaving workspace diagnostic refresh silently broken. Update all callsites and test fixtures accordingly. See https://github.com/gluon-lang/lsp-types/pull/281 --- Cargo.toml | 3 +++ src/config/caps.rs | 2 +- src/global_state/main_loop.rs | 2 +- src/global_state/qihe/tests.rs | 4 +++- src/tests/diagnostics.rs | 8 ++++---- 5 files changed, 12 insertions(+), 7 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 009713549..c396c9b6e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -142,3 +142,6 @@ default = ["server-file-watcher"] server-file-watcher = ["vfs/notify-backend"] profile-trace = ["dep:tracing-chrome"] user-config-schema = ["dep:schemars"] + +[patch.crates-io] +lsp-types = { git = "https://github.com/snowsignal/lsp-types", rev = "0f58d628799182647f688908ba752a33f854fb3a" } diff --git a/src/config/caps.rs b/src/config/caps.rs index 46dba100b..94e3d45ff 100644 --- a/src/config/caps.rs +++ b/src/config/caps.rs @@ -159,7 +159,7 @@ impl Config { check_support! { self.client_caps .workspace.as_ref()? - .diagnostic.as_ref()? + .diagnostics.as_ref()? .refresh_support? } } diff --git a/src/global_state/main_loop.rs b/src/global_state/main_loop.rs index 90bc96e65..0c80d383b 100644 --- a/src/global_state/main_loop.rs +++ b/src/global_state/main_loop.rs @@ -388,7 +388,7 @@ mod tests { ..Default::default() }), workspace: Some(lsp_types::WorkspaceClientCapabilities { - diagnostic: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { + diagnostics: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), ..Default::default() diff --git a/src/global_state/qihe/tests.rs b/src/global_state/qihe/tests.rs index f72beb75d..a0e20da9c 100644 --- a/src/global_state/qihe/tests.rs +++ b/src/global_state/qihe/tests.rs @@ -387,7 +387,9 @@ fn qihe_diagnostics_use_pull_refresh_for_pull_capable_clients() { ..Default::default() }), workspace: Some(WorkspaceClientCapabilities { - diagnostic: Some(DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true) }), + diagnostics: Some(DiagnosticWorkspaceClientCapabilities { + refresh_support: Some(true), + }), ..Default::default() }), ..Default::default() diff --git a/src/tests/diagnostics.rs b/src/tests/diagnostics.rs index c5abb8da6..0917be722 100644 --- a/src/tests/diagnostics.rs +++ b/src/tests/diagnostics.rs @@ -340,7 +340,7 @@ fn unconfigured_workspace_diagnostics_skip_unopened_indexed_files() { ..Default::default() }), workspace: Some(WorkspaceClientCapabilities { - diagnostic: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { + diagnostics: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), ..Default::default() @@ -1081,7 +1081,7 @@ fn workspace_scan_refreshes_diagnostics_for_unopened_systemverilog_dependency() ..Default::default() }), workspace: Some(WorkspaceClientCapabilities { - diagnostic: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { + diagnostics: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), ..Default::default() @@ -1183,7 +1183,7 @@ fn deleted_workspace_file_requests_diagnostic_refresh() { ..Default::default() }), workspace: Some(WorkspaceClientCapabilities { - diagnostic: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { + diagnostics: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), ..Default::default() @@ -1308,7 +1308,7 @@ fn watched_dependency_change_refreshes_workspace_diagnostics() { ..Default::default() }), workspace: Some(WorkspaceClientCapabilities { - diagnostic: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { + diagnostics: Some(lsp_types::DiagnosticWorkspaceClientCapabilities { refresh_support: Some(true), }), ..Default::default()