diff options
| author | Lukas Wirth <lukas@zed.dev> | 2025-08-07 15:24:39 +0200 |
|---|---|---|
| committer | Lukas Wirth <lukas@zed.dev> | 2025-09-16 09:17:38 +0200 |
| commit | 9699d357988310919b2af51fce838d3119d45323 (patch) | |
| tree | b7900e4b6e21d15b22405a926f7d2dda3d476747 /src | |
| parent | e90138632de9cec54f417b4712a8d1a7f5416ef8 (diff) | |
Workaround lsp-types typo
Diffstat (limited to 'src')
| -rw-r--r-- | src/tools/rust-analyzer/crates/rust-analyzer/src/bin/main.rs | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/tools/rust-analyzer/crates/rust-analyzer/src/bin/main.rs b/src/tools/rust-analyzer/crates/rust-analyzer/src/bin/main.rs index ab045e0bf9f..9bcf835b4cc 100644 --- a/src/tools/rust-analyzer/crates/rust-analyzer/src/bin/main.rs +++ b/src/tools/rust-analyzer/crates/rust-analyzer/src/bin/main.rs @@ -208,13 +208,24 @@ fn run_server() -> anyhow::Result<()> { tracing::info!("InitializeParams: {}", initialize_params); let lsp_types::InitializeParams { root_uri, - capabilities, + mut capabilities, workspace_folders, initialization_options, client_info, .. } = from_json::<lsp_types::InitializeParams>("InitializeParams", &initialize_params)?; + // lsp-types has a typo in the `/capabilities/workspace/diagnostics` field, its typoed as `diagnostic` + if let Some(val) = initialize_params.pointer("/capabilities/workspace/diagnostics") { + if let Ok(diag_caps) = from_json::<lsp_types::DiagnosticWorkspaceClientCapabilities>( + "DiagnosticWorkspaceClientCapabilities", + val, + ) { + tracing::info!("Patching lsp-types workspace diagnostics capabilities: {diag_caps:#?}"); + capabilities.workspace.get_or_insert_default().diagnostic.get_or_insert(diag_caps); + } + } + let root_path = match root_uri .and_then(|it| it.to_file_path().ok()) .map(patch_path_prefix) |
