semantic/parser/
parser_language.rs1#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
6pub enum Language {
7 Rust,
8 Python,
9 JavaScript,
10 TypeScript,
11 Go,
12 C,
13 Cpp,
14 Java,
15 Zig,
16 Unknown,
17}
18
19impl Language {
20 pub fn from_path(path: &std::path::Path) -> Self {
22 match path.extension().and_then(|e| e.to_str()) {
23 Some("rs") => Language::Rust,
24 Some("py") | Some("pyi") => Language::Python,
25 Some("js") | Some("jsx") | Some("mjs") | Some("cjs") => Language::JavaScript,
26 Some("ts") | Some("tsx") => Language::TypeScript,
27 Some("go") => Language::Go,
28 Some("c") | Some("h") => Language::C,
29 Some("cpp") | Some("cc") | Some("hpp") | Some("cxx") => Language::Cpp,
30 Some("java") => Language::Java,
31 Some("zig") => Language::Zig,
32 _ => Language::Unknown,
33 }
34 }
35
36 pub fn parser_handle(&self) -> Option<tree_sitter::Language> {
40 self.parser()
41 }
42
43 pub(crate) fn parser(&self) -> Option<tree_sitter::Language> {
45 match self {
46 #[cfg(feature = "lang-rust")]
47 Language::Rust => Some(tree_sitter_rust::LANGUAGE.into()),
48 #[cfg(feature = "lang-python")]
49 Language::Python => Some(tree_sitter_python::LANGUAGE.into()),
50 #[cfg(feature = "lang-javascript")]
51 Language::JavaScript => Some(tree_sitter_javascript::LANGUAGE.into()),
52 #[cfg(feature = "lang-typescript")]
53 Language::TypeScript => Some(tree_sitter_typescript::LANGUAGE_TYPESCRIPT.into()),
54 #[cfg(feature = "lang-go")]
55 Language::Go => Some(tree_sitter_go::LANGUAGE.into()),
56 #[cfg(feature = "lang-c")]
57 Language::C => Some(tree_sitter_c::LANGUAGE.into()),
58 #[cfg(feature = "lang-cpp")]
59 Language::Cpp => Some(tree_sitter_cpp::LANGUAGE.into()),
60 #[cfg(feature = "lang-java")]
61 Language::Java => Some(tree_sitter_java::LANGUAGE.into()),
62 #[cfg(feature = "lang-zig")]
63 Language::Zig => Some(tree_sitter_zig::LANGUAGE.into()),
64 _ => None,
65 }
66 }
67}