pub struct QueryEngine { /* private fields */ }Expand description
Manages query execution against the index
Implementations§
Source§impl QueryEngine
impl QueryEngine
Sourcepub fn new(cache: CacheManager) -> Self
pub fn new(cache: CacheManager) -> Self
Create a new query engine with the given cache manager
Sourcepub fn search_with_metadata(
&self,
pattern: &str,
filter: QueryFilter,
) -> Result<QueryResponse>
pub fn search_with_metadata( &self, pattern: &str, filter: QueryFilter, ) -> Result<QueryResponse>
Execute a query and return matching results with index metadata
This is the preferred method for programmatic/JSON output as it includes index freshness information that AI agents can use to decide whether to re-index.
Sourcepub fn search(
&self,
pattern: &str,
filter: QueryFilter,
) -> Result<Vec<SearchResult>>
pub fn search( &self, pattern: &str, filter: QueryFilter, ) -> Result<Vec<SearchResult>>
Execute a query and return matching results (legacy method)
This method prints warnings to stderr and returns just the results.
For programmatic use, prefer search_with_metadata().
Sourcepub fn find_symbol(&self, name: &str) -> Result<Vec<SearchResult>>
pub fn find_symbol(&self, name: &str) -> Result<Vec<SearchResult>>
Search for symbols by exact name match
Sourcepub fn search_ast(
&self,
pattern: &str,
lang: Option<Language>,
) -> Result<Vec<SearchResult>>
pub fn search_ast( &self, pattern: &str, lang: Option<Language>, ) -> Result<Vec<SearchResult>>
Search using a Tree-sitter AST pattern
Sourcepub fn search_ast_all_files(
&self,
ast_pattern: &str,
filter: QueryFilter,
) -> Result<Vec<SearchResult>>
pub fn search_ast_all_files( &self, ast_pattern: &str, filter: QueryFilter, ) -> Result<Vec<SearchResult>>
Execute AST query on all indexed files (no trigram filtering)
WARNING: This method scans the entire codebase (500ms-2s+). In 95% of cases, use –symbols instead which is 10-100x faster.
§Algorithm
- Get all indexed files for the specified language
- Apply glob/exclude filters to reduce file set
- Load file contents for all matching files
- Execute AST query pattern using Tree-sitter
- Apply remaining filters and return results
§Performance
- Parses entire codebase (not just trigram candidates)
- Expected: 500ms-2s for medium codebases, 2-10s for large codebases
- Use –glob to limit scope for better performance
§Requirements
- Language must be specified (AST queries are language-specific)
- AST pattern must be valid S-expression syntax
Sourcepub fn search_ast_with_text_filter(
&self,
text_pattern: &str,
ast_pattern: &str,
filter: QueryFilter,
) -> Result<Vec<SearchResult>>
pub fn search_ast_with_text_filter( &self, text_pattern: &str, ast_pattern: &str, filter: QueryFilter, ) -> Result<Vec<SearchResult>>
Search using AST pattern with separate text pattern for trigram filtering
This allows efficient AST queries by:
- Using text_pattern for Phase 1 trigram filtering (narrows to candidate files)
- Using ast_pattern for Phase 2 AST matching (structure-aware filtering)
§Example
// Find async functions: trigram search for "fn ", AST match for function_item
engine.search_ast_with_text_filter("fn ", "(function_item (async))", filter)?;Sourcepub fn list_by_kind(&self, kind: SymbolKind) -> Result<Vec<SearchResult>>
pub fn list_by_kind(&self, kind: SymbolKind) -> Result<Vec<SearchResult>>
List all symbols of a specific kind
Sourcepub fn get_index_status(
&self,
) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
pub fn get_index_status( &self, ) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
Get index status for programmatic use (doesn’t print warnings)
Returns (status, can_trust_results, warning) tuple for JSON output. This is optimized for AI agents to detect staleness and auto-reindex.
Sourcepub fn fresh_index_status(
&self,
) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
pub fn fresh_index_status( &self, ) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
Index status read from the filesystem, never from the freshness memo.
For check_index_status: an agent asking whether the index is current is
exactly the caller that must not be told what was true a second ago.
Sourcepub fn index_status_for(
&self,
scope: Option<&[String]>,
) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
pub fn index_status_for( &self, scope: Option<&[String]>, ) -> Result<(IndexStatus, bool, Option<IndexWarning>)>
Index status, with scope naming the files a caller’s answer came from.
scope does NOT soften can_trust_results. A stale index always yields
can_trust_results: false, because the changes that matter most are the ones
scoping cannot see: a newly created file produces no results to intersect
with, and an empty result set has no scope at all — which is exactly the case
where an agent concludes “no callers” and acts on it.
Scope is used only to describe the impact, via
IndexWarning::reason, so a caller can tell “your results may be missing a
file you just edited” from “a file in these results has changed”.
Auto Trait Implementations§
impl Freeze for QueryEngine
impl RefUnwindSafe for QueryEngine
impl Send for QueryEngine
impl Sync for QueryEngine
impl Unpin for QueryEngine
impl UnsafeUnpin for QueryEngine
impl UnwindSafe for QueryEngine
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedDestructor for Twhere
T: 'static,
impl<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<D> OwoColorize for D
impl<D> OwoColorize for D
Source§fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
fn fg<C>(&self) -> FgColorDisplay<'_, C, Self>where
C: Color,
Source§fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
fn bg<C>(&self) -> BgColorDisplay<'_, C, Self>where
C: Color,
Source§fn black(&self) -> FgColorDisplay<'_, Black, Self>
fn black(&self) -> FgColorDisplay<'_, Black, Self>
Source§fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
fn on_black(&self) -> BgColorDisplay<'_, Black, Self>
Source§fn red(&self) -> FgColorDisplay<'_, Red, Self>
fn red(&self) -> FgColorDisplay<'_, Red, Self>
Source§fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
fn on_red(&self) -> BgColorDisplay<'_, Red, Self>
Source§fn green(&self) -> FgColorDisplay<'_, Green, Self>
fn green(&self) -> FgColorDisplay<'_, Green, Self>
Source§fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
fn on_green(&self) -> BgColorDisplay<'_, Green, Self>
Source§fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
fn yellow(&self) -> FgColorDisplay<'_, Yellow, Self>
Source§fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
fn on_yellow(&self) -> BgColorDisplay<'_, Yellow, Self>
Source§fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
fn blue(&self) -> FgColorDisplay<'_, Blue, Self>
Source§fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
fn on_blue(&self) -> BgColorDisplay<'_, Blue, Self>
Source§fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
fn magenta(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_magenta(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
fn purple(&self) -> FgColorDisplay<'_, Magenta, Self>
Source§fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
fn on_purple(&self) -> BgColorDisplay<'_, Magenta, Self>
Source§fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
fn cyan(&self) -> FgColorDisplay<'_, Cyan, Self>
Source§fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
fn on_cyan(&self) -> BgColorDisplay<'_, Cyan, Self>
Source§fn white(&self) -> FgColorDisplay<'_, White, Self>
fn white(&self) -> FgColorDisplay<'_, White, Self>
Source§fn on_white(&self) -> BgColorDisplay<'_, White, Self>
fn on_white(&self) -> BgColorDisplay<'_, White, Self>
Source§fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
fn default_color(&self) -> FgColorDisplay<'_, Default, Self>
Source§fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
fn on_default_color(&self) -> BgColorDisplay<'_, Default, Self>
Source§fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
fn bright_black(&self) -> FgColorDisplay<'_, BrightBlack, Self>
Source§fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
fn on_bright_black(&self) -> BgColorDisplay<'_, BrightBlack, Self>
Source§fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
fn bright_red(&self) -> FgColorDisplay<'_, BrightRed, Self>
Source§fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
fn on_bright_red(&self) -> BgColorDisplay<'_, BrightRed, Self>
Source§fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
fn bright_green(&self) -> FgColorDisplay<'_, BrightGreen, Self>
Source§fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
fn on_bright_green(&self) -> BgColorDisplay<'_, BrightGreen, Self>
Source§fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
fn bright_yellow(&self) -> FgColorDisplay<'_, BrightYellow, Self>
Source§fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
fn on_bright_yellow(&self) -> BgColorDisplay<'_, BrightYellow, Self>
Source§fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
fn bright_blue(&self) -> FgColorDisplay<'_, BrightBlue, Self>
Source§fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
fn on_bright_blue(&self) -> BgColorDisplay<'_, BrightBlue, Self>
Source§fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_magenta(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_magenta(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
fn bright_purple(&self) -> FgColorDisplay<'_, BrightMagenta, Self>
Source§fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
fn on_bright_purple(&self) -> BgColorDisplay<'_, BrightMagenta, Self>
Source§fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
fn bright_cyan(&self) -> FgColorDisplay<'_, BrightCyan, Self>
Source§fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
fn on_bright_cyan(&self) -> BgColorDisplay<'_, BrightCyan, Self>
Source§fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
fn bright_white(&self) -> FgColorDisplay<'_, BrightWhite, Self>
Source§fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
fn on_bright_white(&self) -> BgColorDisplay<'_, BrightWhite, Self>
Source§fn bold(&self) -> BoldDisplay<'_, Self>
fn bold(&self) -> BoldDisplay<'_, Self>
Source§fn dimmed(&self) -> DimDisplay<'_, Self>
fn dimmed(&self) -> DimDisplay<'_, Self>
Source§fn italic(&self) -> ItalicDisplay<'_, Self>
fn italic(&self) -> ItalicDisplay<'_, Self>
Source§fn underline(&self) -> UnderlineDisplay<'_, Self>
fn underline(&self) -> UnderlineDisplay<'_, Self>
Source§fn blink(&self) -> BlinkDisplay<'_, Self>
fn blink(&self) -> BlinkDisplay<'_, Self>
Source§fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
fn blink_fast(&self) -> BlinkFastDisplay<'_, Self>
Source§fn reversed(&self) -> ReversedDisplay<'_, Self>
fn reversed(&self) -> ReversedDisplay<'_, Self>
Source§fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
fn strikethrough(&self) -> StrikeThroughDisplay<'_, Self>
Source§fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn color<Color>(&self, color: Color) -> FgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::fg or
a color-specific method, such as OwoColorize::green, Read moreSource§fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
fn on_color<Color>(&self, color: Color) -> BgDynColorDisplay<'_, Color, Self>where
Color: DynColor,
OwoColorize::bg or
a color-specific method, such as OwoColorize::on_yellow, Read more