From bcdb4ffd88a5260c1b91497e193aaaa65eb9adaa Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Wed, 15 Dec 2021 16:45:01 +0100 Subject: [PATCH] Allow edits at the end of `MultiBuffer` Co-Authored-By: Nathan Sobo --- crates/editor/src/display_map/fold_map.rs | 2 +- crates/editor/src/multi_buffer.rs | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/editor/src/display_map/fold_map.rs b/crates/editor/src/display_map/fold_map.rs index 6e954e60fa..972e152c18 100644 --- a/crates/editor/src/display_map/fold_map.rs +++ b/crates/editor/src/display_map/fold_map.rs @@ -1254,7 +1254,7 @@ mod tests { let buffer = if rng.gen() { MultiBuffer::build_simple(&text, cx) } else { - MultiBuffer::build_random(1, &mut rng, cx) + MultiBuffer::build_random(rng.gen_range(1..=5), &mut rng, cx) }; let mut buffer_snapshot = buffer.read(cx).snapshot(cx); let mut map = FoldMap::new(buffer_snapshot.clone()).0; diff --git a/crates/editor/src/multi_buffer.rs b/crates/editor/src/multi_buffer.rs index 1ed34c4c90..bc15424ae9 100644 --- a/crates/editor/src/multi_buffer.rs +++ b/crates/editor/src/multi_buffer.rs @@ -305,6 +305,9 @@ impl MultiBuffer { let start = range.start.to_offset(&snapshot); let end = range.end.to_offset(&snapshot); cursor.seek(&start, Bias::Right, &()); + if cursor.item().is_none() && start == *cursor.start() { + cursor.prev(&()); + } let start_excerpt = cursor.item().expect("start offset out of bounds"); let start_overshoot = (start - cursor.start()).saturating_sub(start_excerpt.header_height as usize); @@ -312,6 +315,9 @@ impl MultiBuffer { start_excerpt.range.start.to_offset(&start_excerpt.buffer) + start_overshoot; cursor.seek(&end, Bias::Right, &()); + if cursor.item().is_none() && end == *cursor.start() { + cursor.prev(&()); + } let end_excerpt = cursor.item().expect("end offset out of bounds"); let end_overshoot = (end - cursor.start()).saturating_sub(end_excerpt.header_height as usize);