mod adapter;
mod id;
#[cfg(feature = "lang-python")]
mod python;
mod router;
mod rust;
#[cfg(feature = "lang-typescript")]
mod typescript;
pub(crate) use adapter::{LanguageAdapter, LanguageDiffResult, LanguageRepoResult};
pub(crate) use id::LanguageId;
#[cfg(feature = "lang-python")]
pub(crate) use python::PythonAdapter;
pub(crate) use router::route;
pub(crate) use rust::RustAdapter;
#[cfg(feature = "lang-typescript")]
pub(crate) use typescript::TypeScriptAdapter;
#[cfg(test)]
mod tests {
use super::*;
use std::path::Path;
#[test]
fn rust_adapter_accepts_rs_extension_only() {
let adapter = RustAdapter;
assert!(adapter.accepts_path(Path::new("src/lib.rs")));
assert!(adapter.accepts_path(Path::new("crates/ripr/src/main.rs")));
assert!(!adapter.accepts_path(Path::new("README.md")));
assert!(!adapter.accepts_path(Path::new("src/index.ts")));
assert!(!adapter.accepts_path(Path::new("src/index.tsx")));
assert!(!adapter.accepts_path(Path::new("scripts/run.py")));
assert!(!adapter.accepts_path(Path::new("no-extension")));
}
#[test]
fn router_dispatches_known_extensions() {
assert_eq!(route(Path::new("src/lib.rs")), Some(LanguageId::Rust));
assert_eq!(
route(Path::new("src/index.ts")),
Some(LanguageId::TypeScript)
);
assert_eq!(
route(Path::new("src/index.tsx")),
Some(LanguageId::TypeScript)
);
assert_eq!(
route(Path::new("src/index.js")),
Some(LanguageId::TypeScript)
);
assert_eq!(
route(Path::new("src/index.jsx")),
Some(LanguageId::TypeScript)
);
assert_eq!(route(Path::new("scripts/run.py")), Some(LanguageId::Python));
}
#[test]
fn router_returns_none_for_unhandled_paths() {
assert!(route(Path::new("docs/README.md")).is_none());
assert!(route(Path::new("Cargo.toml")).is_none());
assert!(route(Path::new("no-extension")).is_none());
assert!(route(Path::new("src/lib.Rs")).is_none());
}
}