diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 8e0f4d350aada..584c32fce6821 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -897,7 +897,7 @@ impl Application { // Clear any diagnostics for documents with this server open. for doc in self.editor.documents_mut() { - doc.clear_diagnostics(server_id); + doc.clear_diagnostics(Some(server_id)); } // Remove the language server from the registry. diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs index 1d4d65050973a..5dfa34c8f6c91 100644 --- a/helix-term/src/commands/typed.rs +++ b/helix-term/src/commands/typed.rs @@ -1503,7 +1503,7 @@ fn lsp_stop( for doc in cx.editor.documents_mut() { if let Some(client) = doc.remove_language_server_by_name(ls_name) { - doc.clear_diagnostics(client.id()); + doc.clear_diagnostics(Some(client.id())); } } } diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index 0d877bcb28d63..f4627ba21bc25 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -428,11 +428,7 @@ impl Picker { CachedPreview::LargeFile } _ => Document::open(path, None, None, editor.config.clone()) - .map(|mut doc| { - let diagnostics = editor.doc_diagnostics(&doc, |_, _| true); - doc.replace_diagnostics(diagnostics, None); - CachedPreview::Document(Box::new(doc)) - }) + .map(|doc| CachedPreview::Document(Box::new(doc))) .unwrap_or(CachedPreview::NotFound), }, ) @@ -492,7 +488,11 @@ impl Picker { let doc = match current_file { PathOrId::Id(doc_id) => doc_mut!(editor, &doc_id), PathOrId::Path(path) => match picker.preview_cache.get_mut(&path) { - Some(CachedPreview::Document(ref mut doc)) => doc, + Some(CachedPreview::Document(ref mut doc)) => { + let diagnostics = editor.doc_diagnostics(doc, |_, _| true); + doc.replace_diagnostics(diagnostics, None); + doc + } _ => return, }, }; diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index dd3fdda8d157d..3e9a5c13446ba 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -1781,20 +1781,19 @@ impl Document { diagnostics: impl Iterator, language_server_id: Option, ) { - if let Some(id) = language_server_id { - self.clear_diagnostics(id); - } else { - self.diagnostics.clear(); - } + self.clear_diagnostics(language_server_id); self.diagnostics.extend(diagnostics); self.diagnostics .sort_by_key(|diagnostic| (diagnostic.range.start, diagnostic.severity)); } - pub fn clear_diagnostics(&mut self, language_server_id: usize) { - self.diagnostics - .retain(|d| d.language_server_id != language_server_id); + pub fn clear_diagnostics(&mut self, language_server_id: Option) { + if let Some(id) = language_server_id { + self.diagnostics.retain(|d| d.language_server_id != id); + } else { + self.diagnostics.clear(); + } } /// Get the document's auto pairs. If the document has a recognized