@@ -13018,11 +13018,11 @@ impl Editor {
self.fold_creases(to_fold, true, window, cx);
} else {
let multi_buffer_snapshot = self.buffer.read(cx).snapshot(cx);
-
- let buffer_ids: HashSet<_> = multi_buffer_snapshot
- .ranges_to_buffer_ranges(self.selections.disjoint_anchor_ranges())
- .map(|(snapshot, _, _)| snapshot.remote_id())
- .collect();
+ let buffer_ids = self
+ .selections
+ .disjoint_anchor_ranges()
+ .flat_map(|range| multi_buffer_snapshot.buffer_ids_for_range(range))
+ .collect::<HashSet<_>>();
for buffer_id in buffer_ids {
self.fold_buffer(buffer_id, cx);
}
@@ -13195,10 +13195,11 @@ impl Editor {
self.unfold_ranges(&ranges, true, true, cx);
} else {
let multi_buffer_snapshot = self.buffer.read(cx).snapshot(cx);
- let buffer_ids: HashSet<_> = multi_buffer_snapshot
- .ranges_to_buffer_ranges(self.selections.disjoint_anchor_ranges())
- .map(|(snapshot, _, _)| snapshot.remote_id())
- .collect();
+ let buffer_ids = self
+ .selections
+ .disjoint_anchor_ranges()
+ .flat_map(|range| multi_buffer_snapshot.buffer_ids_for_range(range))
+ .collect::<HashSet<_>>();
for buffer_id in buffer_ids {
self.unfold_buffer(buffer_id, cx);
}
@@ -3541,7 +3541,9 @@ impl MultiBufferSnapshot {
cursor.seek(&range.start);
std::iter::from_fn(move || {
let region = cursor.region()?;
- if region.range.start >= range.end {
+ if region.range.start > range.end
+ || region.range.start == range.end && region.range.start > range.start
+ {
return None;
}
cursor.next_excerpt();
@@ -2035,6 +2035,25 @@ fn test_diff_hunks_with_multiple_excerpts(cx: &mut TestAppContext) {
]
);
+ let buffer_ids_by_range = [
+ (Point::new(0, 0)..Point::new(0, 0), &[id_1] as &[_]),
+ (Point::new(0, 0)..Point::new(2, 0), &[id_1]),
+ (Point::new(2, 0)..Point::new(2, 0), &[id_1]),
+ (Point::new(3, 0)..Point::new(3, 0), &[id_1]),
+ (Point::new(8, 0)..Point::new(9, 0), &[id_1]),
+ (Point::new(8, 0)..Point::new(10, 0), &[id_1, id_2]),
+ (Point::new(9, 0)..Point::new(9, 0), &[id_2]),
+ ];
+ for (range, buffer_ids) in buffer_ids_by_range {
+ assert_eq!(
+ snapshot
+ .buffer_ids_for_range(range.clone())
+ .collect::<Vec<_>>(),
+ buffer_ids,
+ "buffer_ids_for_range({range:?}"
+ );
+ }
+
assert_position_translation(&snapshot);
assert_line_indents(&snapshot);