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}