diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index d34528c784..d1beff9dd5 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -23,7 +23,6 @@ use std::{ ffi::OsString, future::Future, iter::{Iterator, Peekable}, - mem, ops::{Deref, DerefMut, Range}, path::{Path, PathBuf}, str, @@ -794,8 +793,7 @@ impl Buffer { } drop(edits_since_save); - let mut diagnostics = mem::take(&mut self.diagnostics); - diagnostics.reset( + let new_diagnostics = DiagnosticSet::new( diagnostics_by_group_id .into_values() .flat_map(|mut diagnostics| { @@ -806,9 +804,9 @@ impl Buffer { primary.diagnostic.is_primary = true; diagnostics }), - self, + content, ); - self.diagnostics = diagnostics; + self.diagnostics = new_diagnostics; if let Some(version) = version { let language_server = self.language_server.as_mut().unwrap(); diff --git a/crates/language/src/diagnostic_set.rs b/crates/language/src/diagnostic_set.rs index 0a04ef17e8..b67a2fe835 100644 --- a/crates/language/src/diagnostic_set.rs +++ b/crates/language/src/diagnostic_set.rs @@ -37,20 +37,22 @@ impl DiagnosticSet { } } - pub fn reset(&mut self, iter: I, buffer: &text::Snapshot) + pub fn new(iter: I, buffer: &text::Snapshot) -> Self where I: IntoIterator>, { let mut entries = iter.into_iter().collect::>(); entries.sort_unstable_by_key(|entry| (entry.range.start, Reverse(entry.range.end))); - self.diagnostics = SumTree::from_iter( - entries.into_iter().map(|entry| DiagnosticEntry { - range: buffer.anchor_before(entry.range.start) - ..buffer.anchor_after(entry.range.end), - diagnostic: entry.diagnostic, - }), - buffer, - ); + Self { + diagnostics: SumTree::from_iter( + entries.into_iter().map(|entry| DiagnosticEntry { + range: buffer.anchor_before(entry.range.start) + ..buffer.anchor_after(entry.range.end), + diagnostic: entry.diagnostic, + }), + buffer, + ), + } } pub fn iter(&self) -> impl Iterator> {