From 8b64b571934b763711b08831a7b5eb60802f172a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 19 Jun 2026 22:40:16 +0200 Subject: [PATCH] Partially revert "Add regression test for NuschtOS/search#339 (#103)" --- libixx/src/string_view.rs | 35 +++++------------------------------ libixx/src/test/search.rs | 27 --------------------------- 2 files changed, 5 insertions(+), 57 deletions(-) diff --git a/libixx/src/string_view.rs b/libixx/src/string_view.rs index 00a7853..4a62ade 100644 --- a/libixx/src/string_view.rs +++ b/libixx/src/string_view.rs @@ -35,52 +35,27 @@ impl Display for StringView<'_, '_> { impl StringView<'_, '_> { pub fn matches(&self, search: &[Vec<&[u8]>]) -> Result { let mut self_parts_start = 0; - // byte offset into self.parts[self_parts_start] to resume from let mut self_parts_start_str_idx = 0; - // single-part matches leave self_parts_start on the matched label, - // a subsequent multi-part segment needs to start at the next label - let mut prev_was_single_part = false; for segment in search { - // for eg: "programs.vim" each dot-component matches a full label exactly - if segment.len() > 1 { - if prev_was_single_part { - self_parts_start += 1; - self_parts_start_str_idx = 0; - - prev_was_single_part = false; - } - for part in segment { - if self_parts_start >= self.parts.len() { - return Ok(false); - } - let self_part = self.index.resolve_reference(self.parts[self_parts_start])?; - if !eq_ignore_ascii_case(&self_part.data, part) { - return Ok(false); - } - self_parts_start += 1; - } - } else { - // bare word or trailing wildcard: substring should match across remaining labels - let part = &segment[0]; + for part in segment { 'outer: { for (self_part_idx, self_part) in self.parts[self_parts_start..].iter().enumerate() { let self_part = self.index.resolve_reference(*self_part)?; if let Some(idx) = ascii_ignore_case_find(&self_part.data[self_parts_start_str_idx..], part) { self_parts_start += self_part_idx; - self_parts_start_str_idx = if self_part_idx == 0 { - self_parts_start_str_idx + idx + if self_part_idx == 0 { + self_parts_start_str_idx += idx; } else { - idx - }; + self_parts_start_str_idx = 0; + } break 'outer; } self_parts_start_str_idx = 0; } return Ok(false); } - prev_was_single_part = true; } } diff --git a/libixx/src/test/search.rs b/libixx/src/test/search.rs index 7351145..ec1b0ae 100644 --- a/libixx/src/test/search.rs +++ b/libixx/src/test/search.rs @@ -103,33 +103,6 @@ fn test_exact_search() { vec![(1, 0, "programs.nixvim.enable".to_string())] ); - assert_eq!( - index.search(Some(0), "programs.vim", 10).unwrap(), - vec![(2, 0, "programs.vim.enable".to_string())] - ); - assert_eq!( - index.search(Some(0), "programs.vim.enable", 10).unwrap(), - vec![(2, 0, "programs.vim.enable".to_string())] - ); - - // regression tests that wildcard matching also works as expected - assert_eq!( - index.search(Some(0), "programs.vim*", 10).unwrap(), - vec![(2, 0, "programs.vim.enable".to_string())] - ); - assert_eq!( - index.search(Some(0), "programs.*vim.enable", 10).unwrap(), - vec![(2, 0, "programs.vim.enable".to_string())] - ); - assert_eq!( - index.search(Some(0), "programs.neovim*", 10).unwrap(), - vec![(0, 0, "programs.neovim.enable".to_string())] - ); - assert_eq!( - index.search(Some(0), "programs.nixvim*", 10).unwrap(), - vec![(1, 0, "programs.nixvim.enable".to_string())] - ); - // regression test that no out of bounds happen assert_eq!( index.search(Some(0), "programs.vim.enable.extra", 10).unwrap(),