Fix jumping to multibuffer excerpts from deleted hunks (#25512)

Co-authored-by: Anthony Eid <hello@anthonyeid.me>

Release Notes:

- N/A

Co-authored-by: Anthony Eid <hello@anthonyeid.me>
This commit is contained in:
Conrad Irwin 2025-02-24 15:56:11 -07:00 committed by GitHub
parent 53a5145dc8
commit 63cfcc26fb
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -15340,27 +15340,39 @@ impl Editor {
let selections = self.selections.all::<usize>(cx); let selections = self.selections.all::<usize>(cx);
let multi_buffer = self.buffer.read(cx); let multi_buffer = self.buffer.read(cx);
for selection in selections { for selection in selections {
for (buffer, mut range, _) in multi_buffer for (snapshot, range, _, anchor) in multi_buffer
.snapshot(cx) .snapshot(cx)
.range_to_buffer_ranges(selection.range()) .range_to_buffer_ranges_with_deleted_hunks(selection.range())
{ {
// When editing branch buffers, jump to the corresponding location if let Some(anchor) = anchor {
// in their base buffer. // selection is in a deleted hunk
let mut buffer_handle = multi_buffer.buffer(buffer.remote_id()).unwrap(); let Some(buffer_id) = anchor.buffer_id else {
let buffer = buffer_handle.read(cx); continue;
if let Some(base_buffer) = buffer.base_buffer() { };
range = buffer.range_to_version(range, &base_buffer.read(cx).version()); let Some(buffer_handle) = multi_buffer.buffer(buffer_id) else {
buffer_handle = base_buffer; continue;
} };
let offset = text::ToOffset::to_offset(
if selection.reversed { &anchor.text_anchor,
mem::swap(&mut range.start, &mut range.end); &buffer_handle.read(cx).snapshot(),
} );
let range = offset..offset;
new_selections_by_buffer new_selections_by_buffer
.entry(buffer_handle) .entry(buffer_handle)
.or_insert((Vec::new(), None)) .or_insert((Vec::new(), None))
.0 .0
.push(range) .push(range)
} else {
let Some(buffer_handle) = multi_buffer.buffer(snapshot.remote_id())
else {
continue;
};
new_selections_by_buffer
.entry(buffer_handle)
.or_insert((Vec::new(), None))
.0
.push(range)
}
} }
} }
} }