From 2b677736bf81fe4fde9802b757bab5b08f064186 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 28 Jan 2025 12:15:47 -0700 Subject: [PATCH] Don't re-wrap unneccessarily on expanding hunks (#23796) Co-Authored-By: Max Release Notes: - N/A Co-authored-by: Max --- crates/multi_buffer/src/multi_buffer.rs | 56 ++++++++++--------------- 1 file changed, 22 insertions(+), 34 deletions(-) diff --git a/crates/multi_buffer/src/multi_buffer.rs b/crates/multi_buffer/src/multi_buffer.rs index ad6338ccd2..369dcc14c5 100644 --- a/crates/multi_buffer/src/multi_buffer.rs +++ b/crates/multi_buffer/src/multi_buffer.rs @@ -2253,46 +2253,34 @@ impl MultiBuffer { let snapshot = self.snapshot.borrow_mut(); let mut excerpt_edits = Vec::new(); for range in ranges.iter() { + let end_excerpt_id = range.end.excerpt_id; let range = range.to_point(&snapshot); - - let mut start = snapshot.anchor_before(Point::new(range.start.row, 0)); - let mut end = snapshot.anchor_before(Point::new( - range.end.row, - snapshot.line_len(MultiBufferRow(range.end.row)), - )); - let peek_end = if range.end.row < snapshot.max_row().0 { - Point::new(range.end.row + 1, 0) - } else { - range.end + let mut peek_end = range.end; + if range.end.row < snapshot.max_row().0 { + peek_end = Point::new(range.end.row + 1, 0); }; for diff_hunk in snapshot.diff_hunks_in_range(range.start..peek_end) { - if diff_hunk.row_range.start.0 <= range.start.row - && diff_hunk.row_range.end.0 >= range.start.row - && diff_hunk.excerpt_id == start.excerpt_id - { - start = Anchor::in_buffer( - diff_hunk.excerpt_id, - diff_hunk.buffer_id, - diff_hunk.buffer_range.start, - ); - } - if diff_hunk.row_range.start.0 <= peek_end.row - && diff_hunk.excerpt_id == end.excerpt_id - { - end = Anchor::in_buffer( - diff_hunk.excerpt_id, - diff_hunk.buffer_id, - diff_hunk.buffer_range.end, - ); + if diff_hunk.excerpt_id.cmp(&end_excerpt_id, &snapshot).is_gt() { + continue; } + let start = Anchor::in_buffer( + diff_hunk.excerpt_id, + diff_hunk.buffer_id, + diff_hunk.buffer_range.start, + ); + let end = Anchor::in_buffer( + diff_hunk.excerpt_id, + diff_hunk.buffer_id, + diff_hunk.buffer_range.end, + ); + let start = snapshot.excerpt_offset_for_anchor(&start); + let end = snapshot.excerpt_offset_for_anchor(&end); + excerpt_edits.push(text::Edit { + old: start..end, + new: start..end, + }); } - let start = snapshot.excerpt_offset_for_anchor(&start); - let end = snapshot.excerpt_offset_for_anchor(&end); - excerpt_edits.push(text::Edit { - old: start..end, - new: start..end, - }); } self.sync_diff_transforms(