From c01f12b15d264d1836db276a6ab7c15b75c921de Mon Sep 17 00:00:00 2001 From: Michael Sloan Date: Tue, 2 Sep 2025 11:23:35 -0600 Subject: [PATCH] zeta: Small refactoring in license detection check - rfind instead of iterated ends_with (#37329) Release Notes: - N/A --- crates/zeta/src/license_detection.rs | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/crates/zeta/src/license_detection.rs b/crates/zeta/src/license_detection.rs index 2939f8a0c491422099e14ae7cc76997a9031e7a0..5f207a44e8bd2028e6a2b416e978f101cfe5bd57 100644 --- a/crates/zeta/src/license_detection.rs +++ b/crates/zeta/src/license_detection.rs @@ -202,20 +202,13 @@ fn check_pattern(pattern: &[PatternPart], input: &str) -> bool { match_any_chars.end += part.match_any_chars.end; continue; } - let mut matched = false; - for skip_count in match_any_chars.start..=match_any_chars.end { - let end_ix = input_ix.saturating_sub(skip_count); - if end_ix < part.text.len() { - break; - } - if input[..end_ix].ends_with(&part.text) { - matched = true; - input_ix = end_ix - part.text.len(); - match_any_chars = part.match_any_chars.clone(); - break; - } - } - if !matched && !part.optional { + let search_range_start = input_ix.saturating_sub(match_any_chars.end + part.text.len()); + let search_range_end = input_ix.saturating_sub(match_any_chars.start); + let found_ix = &input[search_range_start..search_range_end].rfind(&part.text); + if let Some(found_ix) = found_ix { + input_ix = search_range_start + found_ix; + match_any_chars = part.match_any_chars.clone(); + } else if !part.optional { log::trace!( "Failed to match pattern `...{}` against input `...{}`", &part.text[part.text.len().saturating_sub(128)..],