Fix anchor comparison in multi buffer after expanding excerpts (#28828)
Release Notes: - Fixed incorrect excerpt comparison when replacing them Co-authored-by: Conrad Irwin <conrad.irwin@gmail.com> Co-authored-by: Conrad Irwin <conrad@zed.dev>
This commit is contained in:
parent
b486e32f05
commit
41cffa64b0
2 changed files with 10 additions and 6 deletions
|
@ -61,11 +61,14 @@ impl Anchor {
|
||||||
return Ordering::Equal;
|
return Ordering::Equal;
|
||||||
}
|
}
|
||||||
|
|
||||||
let excerpt_id_cmp = self.excerpt_id.cmp(&other.excerpt_id, snapshot);
|
let self_excerpt_id = snapshot.latest_excerpt_id(self.excerpt_id);
|
||||||
|
let other_excerpt_id = snapshot.latest_excerpt_id(other.excerpt_id);
|
||||||
|
|
||||||
|
let excerpt_id_cmp = self_excerpt_id.cmp(&other_excerpt_id, snapshot);
|
||||||
if excerpt_id_cmp.is_ne() {
|
if excerpt_id_cmp.is_ne() {
|
||||||
return excerpt_id_cmp;
|
return excerpt_id_cmp;
|
||||||
}
|
}
|
||||||
if self.excerpt_id == ExcerptId::min() || self.excerpt_id == ExcerptId::max() {
|
if self_excerpt_id == ExcerptId::min() || self_excerpt_id == ExcerptId::max() {
|
||||||
return Ordering::Equal;
|
return Ordering::Equal;
|
||||||
}
|
}
|
||||||
if let Some(excerpt) = snapshot.excerpt(self.excerpt_id) {
|
if let Some(excerpt) = snapshot.excerpt(self.excerpt_id) {
|
||||||
|
|
|
@ -746,19 +746,20 @@ fn test_expand_excerpts(cx: &mut App) {
|
||||||
drop(snapshot);
|
drop(snapshot);
|
||||||
|
|
||||||
multibuffer.update(cx, |multibuffer, cx| {
|
multibuffer.update(cx, |multibuffer, cx| {
|
||||||
|
let line_zero = multibuffer.snapshot(cx).anchor_before(Point::new(0, 0));
|
||||||
multibuffer.expand_excerpts(
|
multibuffer.expand_excerpts(
|
||||||
multibuffer.excerpt_ids(),
|
multibuffer.excerpt_ids(),
|
||||||
1,
|
1,
|
||||||
ExpandExcerptDirection::UpAndDown,
|
ExpandExcerptDirection::UpAndDown,
|
||||||
cx,
|
cx,
|
||||||
)
|
);
|
||||||
|
let snapshot = multibuffer.snapshot(cx);
|
||||||
|
let line_two = snapshot.anchor_before(Point::new(2, 0));
|
||||||
|
assert_eq!(line_two.cmp(&line_zero, &snapshot), cmp::Ordering::Greater);
|
||||||
});
|
});
|
||||||
|
|
||||||
let snapshot = multibuffer.read(cx).snapshot(cx);
|
let snapshot = multibuffer.read(cx).snapshot(cx);
|
||||||
|
|
||||||
// Expanding context lines causes the line containing 'fff' to appear in two different excerpts.
|
|
||||||
// We don't attempt to merge them, because removing the excerpt could create inconsistency with other layers
|
|
||||||
// that are tracking excerpt ids.
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
snapshot.text(),
|
snapshot.text(),
|
||||||
concat!(
|
concat!(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue