skip redudant excerpts check per match

Smit Barmase created

Change summary

crates/editor/src/items.rs              |  3 +--
crates/multi_buffer/src/multi_buffer.rs | 10 ++++++++++
2 files changed, 11 insertions(+), 2 deletions(-)

Detailed changes

crates/editor/src/items.rs 🔗

@@ -1896,8 +1896,7 @@ impl SearchableItem for Editor {
                                                 let end = search_buffer.anchor_before(
                                                     search_range.start + match_range.end,
                                                 );
-                                                buffer
-                                                    .buffer_anchor_range_to_anchor_range(start..end)
+                                                buffer.anchor_range_in_buffer(start..end)
                                             }
                                         })
                                         .collect::<Vec<_>>();

crates/multi_buffer/src/multi_buffer.rs 🔗

@@ -5262,6 +5262,16 @@ impl MultiBufferSnapshot {
         Some(Anchor::in_buffer(path_key_index, anchor))
     }
 
+    /// Lifts a buffer anchor range to a multibuffer anchor range without checking against excerpt boundaries. Returns `None` if there are no excerpts for the buffer.
+    pub fn anchor_range_in_buffer(&self, range: Range<text::Anchor>) -> Option<Range<Anchor>> {
+        if range.start.buffer_id != range.end.buffer_id {
+            return None;
+        }
+
+        let path_key_index = self.path_key_index_for_buffer(range.start.buffer_id)?;
+        Some(Anchor::range_in_buffer(path_key_index, range))
+    }
+
     /// Creates a multibuffer anchor for the given buffer anchor, if it is contained in any excerpt.
     pub fn anchor_in_excerpt(&self, text_anchor: text::Anchor) -> Option<Anchor> {
         for excerpt in {