aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/application.rs
diff options
context:
space:
mode:
Diffstat (limited to 'helix-term/src/application.rs')
-rw-r--r--helix-term/src/application.rs26
1 files changed, 11 insertions, 15 deletions
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 40c6d8c6..0ea31413 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -964,22 +964,18 @@ impl Application {
Notification::Exit => {
self.editor.set_status("Language server exited");
- // Clear any diagnostics for documents with this server open.
- let urls: Vec<_> = self
- .editor
- .documents_mut()
- .filter_map(|doc| {
- if doc.supports_language_server(server_id) {
- doc.clear_diagnostics(server_id);
- doc.url()
- } else {
- None
- }
- })
- .collect();
+ // LSPs may produce diagnostics for files that haven't been opened in helix,
+ // we need to clear those and remove the entries from the list if this leads to
+ // an empty diagnostic list for said files
+ for diags in self.editor.diagnostics.values_mut() {
+ diags.retain(|(_, lsp_id)| *lsp_id != server_id);
+ }
- for url in urls {
- self.editor.diagnostics.remove(&url);
+ self.editor.diagnostics.retain(|_, diags| !diags.is_empty());
+
+ // Clear any diagnostics for documents with this server open.
+ for doc in self.editor.documents_mut() {
+ doc.clear_diagnostics(server_id);
}
// Remove the language server from the registry.