From a2d981aff966d08b9994e1ddab7f9cd1e545c325 Mon Sep 17 00:00:00 2001 From: Abhay Date: Sun, 19 Apr 2026 22:37:29 +0530 Subject: [PATCH] fix: normalize path separators for keyword matching on Windows --- src/db/stream.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/db/stream.rs b/src/db/stream.rs index 24c84e0..ac76b44 100644 --- a/src/db/stream.rs +++ b/src/db/stream.rs @@ -83,7 +83,10 @@ impl<'a> Stream<'a> { None => return true, }; - let path = util::to_lowercase(path); + let mut path = util::to_lowercase(path); + if cfg!(windows) { + path = path.replace('\\', "/"); + } let mut path = path.as_str(); match path.rfind(keywords_last) { Some(idx) => { @@ -202,6 +205,9 @@ mod tests { #[case(&["foo", "o", "bar"], "/foo/bar", false)] #[case(&["/foo/", "/bar"], "/foo/bar", false)] #[case(&["/foo/", "/bar"], "/foo/baz/bar", true)] + // Forward slash matching on Windows-style paths + #[case(&["bar/meow"], r"~\foo\bar\meow", true)] + #[case(&["bar", "meow"], r"~\foo\bar\meow", true)] fn query(#[case] keywords: &[&str], #[case] path: &str, #[case] is_match: bool) { let db = &mut Database::new(PathBuf::new(), Vec::new(), |_| Vec::new(), false); let options = StreamOptions::new(0).with_keywords(keywords.iter());