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