fff-query-parser 0.5.2

Query parser for fff file finder - includes specific syntax for various constraints like globs, extensions, regex etc
Documentation

Fast query parser for file search

This parser takes a search query and extracts structured constraints while preserving text for fuzzy matching. Designed for maximum performance:

  • Single-pass parsing with minimal branching
  • Stack-allocated string buffers

Examples

use fff_query_parser::{QueryParser, Constraint, FuzzyQuery};

let parser = QueryParser::default();

// Single-token queries return FFFQuery with Text fuzzy query and no constraints
let result = parser.parse("hello");
assert!(result.constraints.is_empty());
assert_eq!(result.fuzzy_query, FuzzyQuery::Text("hello"));

// Multi-token queries are parsed
let result = parser.parse("name *.rs");
match &result.fuzzy_query {
    FuzzyQuery::Text(text) => assert_eq!(*text, "name"),
    _ => panic!("Expected text"),
}
assert!(matches!(result.constraints[0], Constraint::Extension("rs")));

// Parse glob pattern with text
let result = parser.parse("**/*.rs foo");
assert!(matches!(result.constraints[0], Constraint::Glob("**/*.rs")));

// Parse negation
let result = parser.parse("!*.rs foo");
match &result.constraints[0] {
    Constraint::Not(inner) => {
        assert!(matches!(inner.as_ref(), Constraint::Extension("rs")));
    }
    _ => panic!("Expected Not constraint"),
}