From ef31252ef8462a039d1305dea7ef3bb3ef992900 Mon Sep 17 00:00:00 2001 From: Conrad Irwin Date: Tue, 6 May 2025 10:23:51 +0100 Subject: [PATCH] Fix panic in update_selection_occurrence_highlights (#29979) Closes #ISSUE Release Notes: - Fixed a (rare) panic when highlighting text in the editor --- crates/editor/src/editor.rs | 54 +++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 7b6f2e99562e04e06c8ea3ffb9f7dce96708fa8c..79a4873c201ba977afe5f06d704e3c77d7bf0206 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -5776,34 +5776,36 @@ impl Editor { .into_iter() .filter(|(_, excerpt_visible_range, _)| !excerpt_visible_range.is_empty()); let mut match_ranges = Vec::new(); + let Ok(regex) = project::search::SearchQuery::text( + query_text.clone(), + false, + false, + false, + Default::default(), + Default::default(), + false, + None, + ) else { + return Vec::default(); + }; for (buffer_snapshot, search_range, excerpt_id) in buffer_ranges { match_ranges.extend( - project::search::SearchQuery::text( - query_text.clone(), - false, - false, - false, - Default::default(), - Default::default(), - false, - None, - ) - .unwrap() - .search(&buffer_snapshot, Some(search_range.clone())) - .await - .into_iter() - .filter_map(|match_range| { - let match_start = buffer_snapshot - .anchor_after(search_range.start + match_range.start); - let match_end = - buffer_snapshot.anchor_before(search_range.start + match_range.end); - let match_anchor_range = Anchor::range_in_buffer( - excerpt_id, - buffer_snapshot.remote_id(), - match_start..match_end, - ); - (match_anchor_range != query_range).then_some(match_anchor_range) - }), + regex + .search(&buffer_snapshot, Some(search_range.clone())) + .await + .into_iter() + .filter_map(|match_range| { + let match_start = buffer_snapshot + .anchor_after(search_range.start + match_range.start); + let match_end = buffer_snapshot + .anchor_before(search_range.start + match_range.end); + let match_anchor_range = Anchor::range_in_buffer( + excerpt_id, + buffer_snapshot.remote_id(), + match_start..match_end, + ); + (match_anchor_range != query_range).then_some(match_anchor_range) + }), ); } match_ranges