apple_code_assistant/utils/
languages.rs1pub const SUPPORTED_LANGUAGES: &[(&str, &[&str])] = &[
5 ("typescript", &["ts"]),
6 ("javascript", &["js"]),
7 ("python", &["py"]),
8 ("rust", &["rs"]),
9 ("go", &["golang"]),
10 ("java", &[]),
11 ("c", &[]),
12 ("cpp", &["c++"]),
13 ("csharp", &["c#", "cs"]),
14 ("swift", &[]),
15 ("kotlin", &["kt"]),
16 ("ruby", &["rb"]),
17 ("php", &[]),
18 ("html", &[]),
19 ("css", &[]),
20 ("sql", &[]),
21 ("shell", &["bash", "sh"]),
22 ("json", &[]),
23 ("yaml", &["yml"]),
24 ("markdown", &["md"]),
25];
26
27pub fn is_supported(lang: &str) -> bool {
29 let lang = lang.to_lowercase();
30 for (name, aliases) in SUPPORTED_LANGUAGES {
31 if *name == lang {
32 return true;
33 }
34 if aliases.contains(&lang.as_str()) {
35 return true;
36 }
37 }
38 false
39}
40
41pub fn normalize(lang: &str) -> Option<String> {
43 let lang = lang.to_lowercase();
44 for (name, aliases) in SUPPORTED_LANGUAGES {
45 if *name == lang {
46 return Some(name.to_string());
47 }
48 if aliases.contains(&lang.as_str()) {
49 return Some(name.to_string());
50 }
51 }
52 None
53}
54
55pub fn from_extension(ext: &str) -> Option<String> {
57 let ext = ext.trim_start_matches('.').to_lowercase();
58 for (name, aliases) in SUPPORTED_LANGUAGES {
59 if *name == ext || aliases.contains(&ext.as_str()) {
60 return Some(name.to_string());
61 }
62 }
63 None
64}
65
66pub fn from_prompt(prompt: &str) -> Option<String> {
68 let p = prompt.to_lowercase();
69 let keywords = [
70 ("typescript", "typescript"),
71 ("python", "python"),
72 ("rust", "rust"),
73 ("react", "typescript"),
74 ("express", "javascript"),
75 ("django", "python"),
76 ("flask", "python"),
77 ];
78 for (keyword, lang) in keywords {
79 if p.contains(keyword) {
80 return Some(lang.to_string());
81 }
82 }
83 None
84}