use std::path::Path;
use crate::error::AftError;
pub use crate::symbols::{Range, Symbol, SymbolMatch};
pub trait LanguageProvider {
fn resolve_symbol(&self, file: &Path, name: &str) -> Result<Vec<SymbolMatch>, AftError>;
fn list_symbols(&self, file: &Path) -> Result<Vec<Symbol>, AftError>;
fn as_any(&self) -> &dyn std::any::Any;
}
pub struct StubProvider;
impl LanguageProvider for StubProvider {
fn resolve_symbol(&self, _file: &Path, _name: &str) -> Result<Vec<SymbolMatch>, AftError> {
Err(AftError::InvalidRequest {
message: "no language provider configured".to_string(),
})
}
fn list_symbols(&self, _file: &Path) -> Result<Vec<Symbol>, AftError> {
Err(AftError::InvalidRequest {
message: "no language provider configured".to_string(),
})
}
fn as_any(&self) -> &dyn std::any::Any {
self
}
}