aboutsummaryrefslogtreecommitdiffstats
path: root/crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-20 12:57:36 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2026-07-20 12:57:36 +0200
commit73be69cd99f5a4784fe69f5d78f423c72e837284 (patch)
treecb47246d2c7edd8cd828abb25a033b732d2289ae /crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs
parentchore: Move more stuff out of atuin-client (diff)
downloadatuin-73be69cd99f5a4784fe69f5d78f423c72e837284.zip
chore: Commit
Diffstat (limited to 'crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs')
-rw-r--r--crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs51
1 files changed, 0 insertions, 51 deletions
diff --git a/crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs b/crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs
deleted file mode 100644
index 386d289c..00000000
--- a/crates/atuin-nucleo/matcher/src/fuzzy_greedy.rs
+++ /dev/null
@@ -1,51 +0,0 @@
-use crate::chars::Char;
-use crate::Matcher;
-
-impl Matcher {
- /// greedy fallback algorithm, much faster (linear time) but reported scores/indices
- /// might not be the best match
- pub(crate) fn fuzzy_match_greedy_<const INDICES: bool, H: Char + PartialEq<N>, N: Char>(
- &mut self,
- haystack: &[H],
- needle: &[N],
- mut start: usize,
- mut end: usize,
- indices: &mut Vec<u32>,
- ) -> Option<u16> {
- let first_char_end = if H::ASCII && N::ASCII { start + 1 } else { end };
- 'nonascii: {
- if !H::ASCII || !N::ASCII {
- let mut needle_iter = needle[1..].iter().copied();
- if let Some(mut needle_char) = needle_iter.next() {
- for (i, &c) in haystack[first_char_end..].iter().enumerate() {
- if c.normalize(&self.config) == needle_char {
- let Some(next_needle_char) = needle_iter.next() else {
- // we found a match so we are now in the same state
- // as the prefilter would produce
- end = first_char_end + i + 1;
- break 'nonascii;
- };
- needle_char = next_needle_char;
- }
- }
- // some needle chars were not matched bail out
- return None;
- }
- }
- } // minimize the greedly match by greedy matching in reverse
-
- let mut needle_iter = needle.iter().rev().copied();
- let mut needle_char = needle_iter.next().unwrap();
- for (i, &c) in haystack[start..end].iter().enumerate().rev() {
- let c = c.normalize(&self.config);
- if c == needle_char {
- let Some(next_needle_char) = needle_iter.next() else {
- start += i;
- break;
- };
- needle_char = next_needle_char;
- }
- }
- Some(self.calculate_score::<INDICES, H, N>(haystack, needle, start, end, indices))
- }
-}