Skip to main content

code_analyze_mcp/
lang.rs

1const EXTENSION_MAP: &[(&str, &str)] = &[
2    ("rs", "rust"),
3    ("py", "python"),
4    ("go", "go"),
5    ("java", "java"),
6    ("ts", "typescript"),
7    ("tsx", "tsx"),
8];
9
10pub fn language_from_extension(ext: &str) -> Option<&'static str> {
11    EXTENSION_MAP
12        .iter()
13        .find(|(e, _)| e.eq_ignore_ascii_case(ext))
14        .map(|(_, lang)| *lang)
15}
16
17#[cfg(test)]
18mod tests {
19    use super::*;
20
21    #[test]
22    fn test_language_from_extension_happy_path() {
23        assert_eq!(language_from_extension("rs"), Some("rust"));
24        assert_eq!(language_from_extension("py"), Some("python"));
25        assert_eq!(language_from_extension("go"), Some("go"));
26        assert_eq!(language_from_extension("java"), Some("java"));
27        assert_eq!(language_from_extension("ts"), Some("typescript"));
28        assert_eq!(language_from_extension("tsx"), Some("tsx"));
29    }
30
31    #[test]
32    fn test_language_from_extension_edge_case() {
33        assert_eq!(language_from_extension("unknown"), None);
34        assert_eq!(language_from_extension(""), None);
35        assert_eq!(language_from_extension("RS"), Some("rust"));
36    }
37}