Skip to content

Commit 14b2cd0

Browse files
ConradIrwinnotpeter
authored andcommitted
Fix panic in vim text-objects (#22753)
Caused by messing up offsets between multi-buffers and excerpts :( Fixes #22739 Release Notes: - Fixed a panic in vim text objects in multibuffers
1 parent 5d35ba3 commit 14b2cd0

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

crates/vim/src/object.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -514,13 +514,15 @@ fn text_object(
514514

515515
let excerpt = snapshot.excerpt_containing(offset..offset)?;
516516
let buffer = excerpt.buffer();
517+
let offset = excerpt.map_offset_to_buffer(offset);
517518

518519
let mut matches: Vec<Range<usize>> = buffer
519520
.text_object_ranges(offset..offset, TreeSitterOptions::default())
520521
.filter_map(|(r, m)| if m == target { Some(r) } else { None })
521522
.collect();
522523
matches.sort_by_key(|r| (r.end - r.start));
523-
if let Some(range) = matches.first() {
524+
if let Some(buffer_range) = matches.first() {
525+
let range = excerpt.map_range_from_buffer(buffer_range.clone());
524526
return Some(range.start.to_display_point(map)..range.end.to_display_point(map));
525527
}
526528

@@ -537,12 +539,14 @@ fn text_object(
537539
.filter_map(|(r, m)| if m == target { Some(r) } else { None })
538540
.collect();
539541
matches.sort_by_key(|r| r.start);
540-
if let Some(range) = matches.first() {
541-
if !range.is_empty() {
542+
if let Some(buffer_range) = matches.first() {
543+
if !buffer_range.is_empty() {
544+
let range = excerpt.map_range_from_buffer(buffer_range.clone());
542545
return Some(range.start.to_display_point(map)..range.end.to_display_point(map));
543546
}
544547
}
545-
return Some(around_range.start.to_display_point(map)..around_range.end.to_display_point(map));
548+
let buffer_range = excerpt.map_range_from_buffer(around_range.clone());
549+
return Some(buffer_range.start.to_display_point(map)..buffer_range.end.to_display_point(map));
546550
}
547551

548552
fn argument(

0 commit comments

Comments
 (0)