1pub mod rust;
2mod tests;
3pub mod typescript;
4
5use codemov_core::{ImportEdge, Language, Symbol};
6use thiserror::Error;
7
8#[derive(Debug, Error)]
9pub enum ParseError {
10 #[error("unsupported language: {0:?}")]
11 UnsupportedLanguage(Language),
12 #[error("parse error: {0}")]
13 Parse(String),
14 #[error("utf8 error: {0}")]
15 Utf8(#[from] std::str::Utf8Error),
16}
17
18pub fn extract_symbols(source: &[u8], language: Language) -> Result<Vec<Symbol>, ParseError> {
19 match language {
20 Language::Rust => rust::extract(source),
21 Language::TypeScript | Language::JavaScript => typescript::extract(source, language),
22 Language::Unknown => Ok(vec![]),
23 }
24}
25
26pub fn extract_imports(source: &[u8], language: Language) -> Result<Vec<ImportEdge>, ParseError> {
27 match language {
28 Language::Rust => rust::extract_imports(source),
29 Language::TypeScript | Language::JavaScript => {
30 typescript::extract_imports(source, language)
31 }
32 Language::Unknown => Ok(vec![]),
33 }
34}