Skip to main content

dk_engine/parser/
mod.rs

1pub mod engine;
2pub mod lang_config;
3pub mod langs;
4pub mod registry;
5
6pub use registry::ParserRegistry;
7
8use dk_core::{FileAnalysis, Import, RawCallEdge, Result, Symbol, TypeInfo};
9use std::path::Path;
10
11/// Trait implemented by each language-specific parser.
12pub trait LanguageParser: Send + Sync {
13    fn extensions(&self) -> &[&str];
14    fn extract_symbols(&self, source: &[u8], file_path: &Path) -> Result<Vec<Symbol>>;
15    fn extract_calls(&self, source: &[u8], file_path: &Path) -> Result<Vec<RawCallEdge>>;
16    fn extract_types(&self, source: &[u8], file_path: &Path) -> Result<Vec<TypeInfo>>;
17    fn extract_imports(&self, source: &[u8], file_path: &Path) -> Result<Vec<Import>>;
18    fn parse_file(&self, source: &[u8], file_path: &Path) -> Result<FileAnalysis> {
19        Ok(FileAnalysis {
20            symbols: self.extract_symbols(source, file_path)?,
21            calls: self.extract_calls(source, file_path)?,
22            types: self.extract_types(source, file_path)?,
23            imports: self.extract_imports(source, file_path)?,
24        })
25    }
26}