pub mod error;
pub mod token;
pub mod tokenizer;
pub mod traits;
pub mod utils;
pub mod go;
pub mod java;
pub mod javascript;
pub mod python;
pub mod rust;
pub use error::ParseError;
pub use go::GoParser;
pub use java::JavaParser;
pub use javascript::JavaScriptParser;
pub use python::PythonParser;
pub use rust::RustParser;
pub use token::{Token, TokenKind};
pub use traits::{CodeParser, ControlFlowParser, ScopeParser};
pub use utils::{get_file_extension, read_file_content};
pub fn get_parser_for_extension(ext: &str) -> Option<Box<dyn CodeParser>> {
match ext.to_lowercase().as_str() {
"rs" => Some(Box::new(RustParser)),
"py" | "pyw" | "pyi" => Some(Box::new(PythonParser)),
"js" | "jsx" | "ts" | "tsx" | "mjs" | "cjs" => Some(Box::new(JavaScriptParser)),
"go" => Some(Box::new(GoParser)),
"java" => Some(Box::new(JavaParser)),
_ => None,
}
}
pub fn get_parser_for_language(language: &str) -> Option<Box<dyn CodeParser>> {
match language.to_lowercase().as_str() {
"rust" => Some(Box::new(RustParser)),
"python" => Some(Box::new(PythonParser)),
"javascript" | "typescript" => Some(Box::new(JavaScriptParser)),
"go" | "golang" => Some(Box::new(GoParser)),
"java" => Some(Box::new(JavaParser)),
_ => None,
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_get_parser_rust() {
let parser = get_parser_for_extension("rs");
assert!(parser.is_some());
assert_eq!(parser.unwrap().language_name(), "Rust");
}
#[test]
fn test_get_parser_python() {
let parser = get_parser_for_extension("py");
assert!(parser.is_some());
assert_eq!(parser.unwrap().language_name(), "Python");
}
#[test]
fn test_get_parser_unknown() {
let parser = get_parser_for_extension("unknown");
assert!(parser.is_none());
}
}