diff --git a/crates/language/src/buffer.rs b/crates/language/src/buffer.rs index e6b0d48820..353f3182c0 100644 --- a/crates/language/src/buffer.rs +++ b/crates/language/src/buffer.rs @@ -1006,7 +1006,7 @@ impl Buffer { let old_text = old_text.to_string(); let line_ending = LineEnding::detect(&new_text); LineEnding::normalize(&mut new_text); - let changes = TextDiff::from_lines(old_text.as_str(), new_text.as_str()) + let changes = TextDiff::from_chars(old_text.as_str(), new_text.as_str()) .iter_all_changes() .map(|c| (c.tag(), c.value().len())) .collect::>(); diff --git a/crates/language/src/tests.rs b/crates/language/src/tests.rs index 937ff06930..572f2b0ba8 100644 --- a/crates/language/src/tests.rs +++ b/crates/language/src/tests.rs @@ -183,20 +183,23 @@ fn test_edit_events(cx: &mut gpui::MutableAppContext) { async fn test_apply_diff(cx: &mut gpui::TestAppContext) { let text = "a\nbb\nccc\ndddd\neeeee\nffffff\n"; let buffer = cx.add_model(|cx| Buffer::new(0, text, cx)); + let anchor = buffer.read_with(cx, |buffer, _| buffer.anchor_before(Point::new(3, 3))); let text = "a\nccc\ndddd\nffffff\n"; let diff = buffer.read_with(cx, |b, cx| b.diff(text.into(), cx)).await; buffer.update(cx, |buffer, cx| { buffer.apply_diff(diff, cx).unwrap(); + assert_eq!(buffer.text(), text); + assert_eq!(anchor.to_point(&buffer), Point::new(2, 3)); }); - cx.read(|cx| assert_eq!(buffer.read(cx).text(), text)); let text = "a\n1\n\nccc\ndd2dd\nffffff\n"; let diff = buffer.read_with(cx, |b, cx| b.diff(text.into(), cx)).await; buffer.update(cx, |buffer, cx| { buffer.apply_diff(diff, cx).unwrap(); + assert_eq!(buffer.text(), text); + assert_eq!(anchor.to_point(&buffer), Point::new(4, 4)); }); - cx.read(|cx| assert_eq!(buffer.read(cx).text(), text)); } #[gpui::test] diff --git a/crates/project/src/project_tests.rs b/crates/project/src/project_tests.rs index 4c5e9ef8e1..3dc4e9359f 100644 --- a/crates/project/src/project_tests.rs +++ b/crates/project/src/project_tests.rs @@ -2498,7 +2498,7 @@ async fn test_buffer_file_changes_on_disk(cx: &mut gpui::TestAppContext) { .collect::>(); assert_eq!( anchor_positions, - [Point::new(1, 1), Point::new(3, 1), Point::new(4, 0)] + [Point::new(1, 1), Point::new(3, 1), Point::new(3, 5)] ); });