pub mod analysis;
pub mod deep;
pub mod facts;
pub mod graph;
pub mod review;
pub(crate) fn lang_for_extension(path: &str) -> &'static str {
let lower = path.to_ascii_lowercase();
if lower.ends_with(".rs") {
"rust"
} else if lower.ends_with(".tsx") {
"tsx"
} else if lower.ends_with(".ts") {
"typescript"
} else if lower.ends_with(".jsx") {
"jsx"
} else if lower.ends_with(".js") {
"javascript"
} else if lower.ends_with(".py") {
"python"
} else if lower.ends_with(".go") {
"go"
} else if lower.ends_with(".java") {
"java"
} else {
"unknown"
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn lang_for_extension_rust() {
assert_eq!(lang_for_extension("src/main.rs"), "rust");
}
#[test]
fn lang_for_extension_ts() {
assert_eq!(lang_for_extension("src/app.ts"), "typescript");
}
#[test]
fn lang_for_extension_tsx() {
assert_eq!(lang_for_extension("src/App.tsx"), "tsx");
}
#[test]
fn lang_for_extension_jsx() {
assert_eq!(lang_for_extension("src/App.jsx"), "jsx");
}
#[test]
fn lang_for_extension_js() {
assert_eq!(lang_for_extension("index.js"), "javascript");
}
#[test]
fn lang_for_extension_py() {
assert_eq!(lang_for_extension("scripts/run.py"), "python");
}
#[test]
fn lang_for_extension_go() {
assert_eq!(lang_for_extension("main.go"), "go");
}
#[test]
fn lang_for_extension_java() {
assert_eq!(lang_for_extension("Main.java"), "java");
}
#[test]
fn lang_for_extension_unknown() {
assert_eq!(lang_for_extension("Makefile"), "unknown");
assert_eq!(lang_for_extension("data.csv"), "unknown");
}
#[test]
fn lang_for_extension_case_insensitive() {
assert_eq!(lang_for_extension("main.RS"), "rust");
assert_eq!(lang_for_extension("App.TSX"), "tsx");
}
#[test]
fn lang_for_extension_dts_is_typescript() {
assert_eq!(lang_for_extension("src/index.d.ts"), "typescript");
assert_eq!(lang_for_extension("types/global.D.TS"), "typescript");
}
}