diff --git a/crates/editor/src/display_map/tab_map.rs b/crates/editor/src/display_map/tab_map.rs index 839edd5c15..c3a77cc578 100644 --- a/crates/editor/src/display_map/tab_map.rs +++ b/crates/editor/src/display_map/tab_map.rs @@ -16,6 +16,7 @@ impl TabMap { let snapshot = TabSnapshot { fold_snapshot: input, tab_size, + version: 0, }; (Self(Mutex::new(snapshot.clone())), snapshot) } @@ -27,12 +28,14 @@ impl TabMap { tab_size: NonZeroU32, ) -> (TabSnapshot, Vec) { let mut old_snapshot = self.0.lock(); - let new_snapshot = TabSnapshot { + let mut new_snapshot = TabSnapshot { fold_snapshot, tab_size, + version: old_snapshot.version, }; if old_snapshot.tab_size != new_snapshot.tab_size { + new_snapshot.version += 1; let edits = vec![TabEdit { old: TabPoint::zero()..old_snapshot.max_point(), new: TabPoint::zero()..new_snapshot.max_point(), @@ -40,6 +43,10 @@ impl TabMap { return (new_snapshot, edits); } + if old_snapshot.fold_snapshot.version != new_snapshot.fold_snapshot.version { + new_snapshot.version += 1; + } + let old_max_offset = old_snapshot.fold_snapshot.len(); let mut tab_edits = Vec::with_capacity(fold_edits.len()); for fold_edit in &mut fold_edits { @@ -97,6 +104,7 @@ impl TabMap { pub struct TabSnapshot { pub fold_snapshot: FoldSnapshot, pub tab_size: NonZeroU32, + pub version: usize, } impl TabSnapshot { @@ -168,10 +176,6 @@ impl TabSnapshot { } } - pub fn version(&self) -> usize { - self.fold_snapshot.version - } - pub fn chunks<'a>( &'a self, range: Range, diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index 9584d1c14d..aa90f942db 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -220,7 +220,7 @@ impl WrapMap { if !self.snapshot.interpolated { let mut to_remove_len = 0; for (tab_snapshot, _) in &self.pending_edits { - if tab_snapshot.version() <= self.snapshot.tab_snapshot.version() { + if tab_snapshot.version <= self.snapshot.tab_snapshot.version { to_remove_len += 1; } else { break; @@ -282,7 +282,7 @@ impl WrapMap { let was_interpolated = self.snapshot.interpolated; let mut to_remove_len = 0; for (tab_snapshot, edits) in &self.pending_edits { - if tab_snapshot.version() <= self.snapshot.tab_snapshot.version() { + if tab_snapshot.version <= self.snapshot.tab_snapshot.version { to_remove_len += 1; } else { let interpolated_edits = self.snapshot.interpolate(tab_snapshot.clone(), &edits);