Allow unfolding deleted buffers in project diff w/ keyboard (#25835)

Release Notes:

- N/A
This commit is contained in:
Max Brunsfeld 2025-02-28 16:02:35 -08:00 committed by GitHub
parent ec88a6886f
commit 1c4c568068
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 32 additions and 10 deletions

View file

@ -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);
}

View file

@ -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();

View file

@ -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);