fix diagnostic exceprt issues

Co-authored-by: Lukas Wirth <lukas@zed.dev>
This commit is contained in:
Smit Barmase 2025-08-19 17:19:48 +05:30
parent 47e1d4511c
commit bc2c89a3c0
No known key found for this signature in database
2 changed files with 37 additions and 11 deletions

View file

@ -1587,7 +1587,14 @@ impl MultiBuffer {
};
let buffer_snapshot = buffer.read(cx).snapshot();
self.update_path_excerpts(path.clone(), buffer, &buffer_snapshot, merged_ranges, cx);
self.update_path_excerpts(
path.clone(),
buffer,
&buffer_snapshot,
merged_ranges,
false,
cx,
);
}
}
@ -1611,6 +1618,7 @@ impl MultiBuffer {
&buffer_snapshot,
new,
counts,
false,
cx,
)
}
@ -1621,6 +1629,7 @@ impl MultiBuffer {
buffer: Entity<Buffer>,
buffer_snapshot: &BufferSnapshot,
excerpt_ranges: Vec<ExcerptRange<Point>>,
keep_excerpts: bool,
cx: &mut Context<Self>,
) -> (Vec<Range<Anchor>>, bool) {
let (new, counts) = Self::merge_excerpt_ranges(&excerpt_ranges);
@ -1631,6 +1640,7 @@ impl MultiBuffer {
buffer_snapshot,
new,
counts,
keep_excerpts,
cx,
)
}
@ -1665,6 +1675,7 @@ impl MultiBuffer {
&buffer_snapshot,
new,
counts,
false,
cx,
);
ranges
@ -1683,10 +1694,11 @@ impl MultiBuffer {
buffer_snapshot: &BufferSnapshot,
new: Vec<ExcerptRange<Point>>,
counts: Vec<usize>,
keep_excerpts: bool,
cx: &mut Context<Self>,
) -> (Vec<Range<Anchor>>, bool) {
let (excerpt_ids, added_a_new_excerpt) =
self.update_path_excerpts(path, buffer, buffer_snapshot, new, cx);
self.update_path_excerpts(path, buffer, buffer_snapshot, new, keep_excerpts, cx);
let mut result = Vec::new();
let mut ranges = ranges.into_iter();
@ -1735,6 +1747,7 @@ impl MultiBuffer {
buffer: Entity<Buffer>,
buffer_snapshot: &BufferSnapshot,
new: Vec<ExcerptRange<Point>>,
keep_excerpts: bool,
cx: &mut Context<Self>,
) -> (Vec<ExcerptId>, bool) {
let mut insert_after = self
@ -1819,8 +1832,20 @@ impl MultiBuffer {
match (new, existing) {
(None, None) => break,
(None, Some((existing_id, _))) => {
existing_iter.next();
to_remove.push(existing_id);
if keep_excerpts {
self.insert_excerpts_with_ids_after(
insert_after,
buffer.clone(),
mem::take(&mut to_insert),
cx,
);
insert_after = existing_iter.next().unwrap();
excerpt_ids.push(insert_after);
new_iter.next();
} else {
existing_iter.next();
to_remove.push(existing_id);
}
continue;
}
(Some(_), None) => {