daipendency_extractor/
extractor.rs

1use crate::error::{DependencyResolutionError, ExtractionError};
2use crate::library_metadata::{LibraryMetadata, LibraryMetadataError};
3use crate::types::Namespace;
4use std::path::{Path, PathBuf};
5use tree_sitter::{Language, Parser};
6
7/// Extract metadata and public API information from a library.
8pub trait Extractor<EntryPoint> {
9    /// Provide the TreeSitter language
10    fn get_parser_language(&self) -> Language;
11
12    /// Provide the library metadata
13    fn get_library_metadata(
14        &self,
15        path: &Path,
16    ) -> Result<LibraryMetadata<EntryPoint>, LibraryMetadataError>;
17
18    /// Extract the public API
19    fn extract_public_api(
20        &self,
21        metadata: &LibraryMetadata<EntryPoint>,
22        parser: &mut Parser,
23    ) -> Result<Vec<Namespace>, ExtractionError>;
24
25    /// Resolve the path to a dependency
26    fn resolve_dependency_path(
27        &self,
28        dependency_name: &str,
29        dependant_path: &Path,
30    ) -> Result<PathBuf, DependencyResolutionError>;
31}