Skip to main content

aft/
language.rs

1use std::path::Path;
2
3use crate::error::AftError;
4pub use crate::symbols::{Range, Symbol, SymbolMatch};
5
6/// Trait for language-specific symbol resolution.
7///
8/// S02 implements this with tree-sitter parsing via `TreeSitterProvider`.
9pub trait LanguageProvider {
10    /// Resolve a symbol by name within a file. Returns all matches.
11    fn resolve_symbol(&self, file: &Path, name: &str) -> Result<Vec<SymbolMatch>, AftError>;
12
13    /// List all top-level symbols in a file.
14    fn list_symbols(&self, file: &Path) -> Result<Vec<Symbol>, AftError>;
15}
16
17/// Placeholder provider that rejects all calls.
18///
19/// Retained for tests and fallback. Production code uses `TreeSitterProvider`.
20pub struct StubProvider;
21
22impl LanguageProvider for StubProvider {
23    fn resolve_symbol(&self, _file: &Path, _name: &str) -> Result<Vec<SymbolMatch>, AftError> {
24        Err(AftError::InvalidRequest {
25            message: "no language provider configured".to_string(),
26        })
27    }
28
29    fn list_symbols(&self, _file: &Path) -> Result<Vec<Symbol>, AftError> {
30        Err(AftError::InvalidRequest {
31            message: "no language provider configured".to_string(),
32        })
33    }
34}