editor: Fix bracket colorization discoloring pure deletion diff hunks (#49618) (cherry-pick to preview) (#49626)

zed-zippy[bot] and Lukas Wirth created

Cherry-pick of #49618 to preview

----
Release Notes:

- N/A *or* Added/Fixed/Improved ...

Co-authored by: Cole Miller <cole@zed.dev>

Co-authored-by: Lukas Wirth <lukas@zed.dev>

Change summary

crates/acp_thread/src/acp_thread.rs       |  6 +-----
crates/editor/src/bracket_colorization.rs | 10 ++++------
crates/text/src/text.rs                   | 12 ++++++++++++
3 files changed, 17 insertions(+), 11 deletions(-)

Detailed changes

crates/acp_thread/src/acp_thread.rs 🔗

@@ -2315,11 +2315,7 @@ impl AcpThread {
                     text_diff(old_text.as_str(), &content)
                         .into_iter()
                         .map(|(range, replacement)| {
-                            (
-                                snapshot.anchor_after(range.start)
-                                    ..snapshot.anchor_before(range.end),
-                                replacement,
-                            )
+                            (snapshot.anchor_range_between(range), replacement)
                         })
                         .collect::<Vec<_>>()
                 })

crates/editor/src/bracket_colorization.rs 🔗

@@ -64,12 +64,10 @@ impl Editor {
                         .filter_map(|pair| {
                             let color_index = pair.color_index?;
 
-                            let buffer_open_range = buffer_snapshot
-                                .anchor_before(pair.open_range.start)
-                                ..buffer_snapshot.anchor_after(pair.open_range.end);
-                            let buffer_close_range = buffer_snapshot
-                                .anchor_before(pair.close_range.start)
-                                ..buffer_snapshot.anchor_after(pair.close_range.end);
+                            let buffer_open_range =
+                                buffer_snapshot.anchor_range_around(pair.open_range);
+                            let buffer_close_range =
+                                buffer_snapshot.anchor_range_around(pair.close_range);
                             let [
                                 buffer_open_range_start,
                                 buffer_open_range_end,

crates/text/src/text.rs 🔗

@@ -2401,10 +2401,22 @@ impl BufferSnapshot {
         }
     }
 
+    /// Returns an anchor range for the given input position range that is anchored to the text inbetween.
+    pub fn anchor_range_around<T: ToOffset>(&self, position: Range<T>) -> Range<Anchor> {
+        self.anchor_before(position.start)..self.anchor_after(position.end)
+    }
+
+    /// Returns an anchor range for the given input position range that is anchored to the text before the start position and after the end position.
+    pub fn anchor_range_between<T: ToOffset>(&self, position: Range<T>) -> Range<Anchor> {
+        self.anchor_before(position.start)..self.anchor_after(position.end)
+    }
+
+    /// Returns an anchor for the given input position that is anchored to the text before the position.
     pub fn anchor_before<T: ToOffset>(&self, position: T) -> Anchor {
         self.anchor_at(position, Bias::Left)
     }
 
+    /// Returns an anchor for the given input position that is anchored to the text after the position.
     pub fn anchor_after<T: ToOffset>(&self, position: T) -> Anchor {
         self.anchor_at(position, Bias::Right)
     }