Handle empty diff excerpts (#24168)
Release Notes: - Fix display, revert and undo of deleted hunks when the file is empty.
This commit is contained in:
parent
8bce896395
commit
cf4539ec79
4 changed files with 98 additions and 1318 deletions
|
@ -2875,15 +2875,6 @@ impl MultiBuffer {
|
|||
// Visit each excerpt that intersects the edit.
|
||||
let mut did_expand_hunks = false;
|
||||
while let Some(excerpt) = excerpts.item() {
|
||||
if excerpt.text_summary.len == 0 {
|
||||
if excerpts.end(&()) <= edit.new.end {
|
||||
excerpts.next(&());
|
||||
continue;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Recompute the expanded hunks in the portion of the excerpt that
|
||||
// intersects the edit.
|
||||
if let Some(diff_state) = snapshot.diffs.get(&excerpt.buffer_id) {
|
||||
|
@ -3602,8 +3593,10 @@ impl MultiBufferSnapshot {
|
|||
value: None,
|
||||
});
|
||||
|
||||
if cursor.region().is_some_and(|region| !region.is_main_buffer) {
|
||||
cursor.prev();
|
||||
if let Some(region) = cursor.region().filter(|region| !region.is_main_buffer) {
|
||||
if region.range.start.key > 0 {
|
||||
cursor.prev()
|
||||
}
|
||||
}
|
||||
|
||||
iter::from_fn(move || loop {
|
||||
|
@ -6044,17 +6037,13 @@ where
|
|||
}
|
||||
|
||||
fn main_buffer_position(&self) -> Option<D> {
|
||||
if let DiffTransform::BufferContent { .. } = self.diff_transforms.next_item()? {
|
||||
let excerpt = self.excerpts.item()?;
|
||||
let buffer = &excerpt.buffer;
|
||||
let buffer_context_start = excerpt.range.context.start.summary::<D>(buffer);
|
||||
let mut buffer_start = buffer_context_start;
|
||||
let overshoot = self.diff_transforms.end(&()).1 .0 - self.excerpts.start().0;
|
||||
buffer_start.add_assign(&overshoot);
|
||||
Some(buffer_start)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
let excerpt = self.excerpts.item()?;
|
||||
let buffer = &excerpt.buffer;
|
||||
let buffer_context_start = excerpt.range.context.start.summary::<D>(buffer);
|
||||
let mut buffer_start = buffer_context_start;
|
||||
let overshoot = self.diff_transforms.end(&()).1 .0 - self.excerpts.start().0;
|
||||
buffer_start.add_assign(&overshoot);
|
||||
Some(buffer_start)
|
||||
}
|
||||
|
||||
fn build_region(&self) -> Option<MultiBufferRegion<'a, D>> {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue