diff --git a/crates/project/src/lsp_store.rs b/crates/project/src/lsp_store.rs index 59b7a6932d4733a78959e9e4f481a63589811a52..1ae6d1295f37df31aac03e2019cb5510c836fb1c 100644 --- a/crates/project/src/lsp_store.rs +++ b/crates/project/src/lsp_store.rs @@ -12647,30 +12647,29 @@ impl LspStore { .language_servers .get_mut(&server_id) .context("Could not obtain Language Servers state")?; - local + let registrations = local .language_server_dynamic_registrations .get_mut(&server_id) .with_context(|| { format!("Expected dynamic registration to exist for server {server_id}") - })?.diagnostics + })?; + registrations.diagnostics .remove(&Some(unreg.id.clone())) .with_context(|| format!( "Attempted to unregister non-existent diagnostic registration with ID {}", unreg.id) )?; + let removed_last_diagnostic_provider = registrations.diagnostics.is_empty(); - let mut has_any_diagnostic_providers_still = true; if let LanguageServerState::Running { workspace_diagnostics_refresh_tasks, .. } = state { workspace_diagnostics_refresh_tasks.remove(&Some(unreg.id.clone())); - has_any_diagnostic_providers_still = - !workspace_diagnostics_refresh_tasks.is_empty(); } - if !has_any_diagnostic_providers_still { + if removed_last_diagnostic_provider { server.update_capabilities(|capabilities| { debug_assert!(capabilities.diagnostic_provider.is_some()); capabilities.diagnostic_provider = None;