diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index d84b25936a..565c016f3b 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -108,8 +108,16 @@ impl WrapMap { edits: Vec, cx: &mut ModelContext, ) -> (Snapshot, Vec) { - self.pending_edits.push_back((tab_snapshot, edits)); - self.flush_edits(cx); + if self.wrap_width.is_some() { + self.pending_edits.push_back((tab_snapshot, edits)); + self.flush_edits(cx); + } else { + self.edits_since_sync = self + .edits_since_sync + .compose(&self.snapshot.interpolate(tab_snapshot, &edits)); + self.snapshot.interpolated = false; + } + ( self.snapshot.clone(), mem::take(&mut self.edits_since_sync).into_inner(), @@ -1112,6 +1120,7 @@ mod tests { while wrap_map.read_with(&cx, |map, _| map.is_rewrapping()) { notifications.recv().await.unwrap(); } + wrap_map.read_with(&cx, |map, _| assert!(map.pending_edits.is_empty())); } if !wrap_map.read_with(&cx, |map, _| map.is_rewrapping()) { @@ -1193,6 +1202,14 @@ mod tests { } assert_eq!(initial_text.to_string(), snapshot_text.to_string()); } + + if wrap_map.read_with(&cx, |map, _| map.is_rewrapping()) { + log::info!("Waiting for wrapping to finish"); + while wrap_map.read_with(&cx, |map, _| map.is_rewrapping()) { + notifications.recv().await.unwrap(); + } + } + wrap_map.read_with(&cx, |map, _| assert!(map.pending_edits.is_empty())); } fn wrap_text(