fluidattacks_blends_domain/
language.rs1use crate::syntax::dispatchers::{self, Dispatcher};
4
5#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
6pub enum Language {
7 CSharp,
8 Elixir,
9 Go,
10 Hcl,
11 Java,
12 JavaScript,
13 Json,
14 Kotlin,
15 Php,
16 Python,
17 Ruby,
18 Rust,
19 Scala,
20 Swift,
21 TypeScript,
22 Yaml,
23}
24
25impl Language {
26 #[must_use]
27 pub fn from_extension(extension: &str) -> Option<Self> {
28 match extension {
29 "cs" => Some(Self::CSharp),
30 "ex" | "exs" => Some(Self::Elixir),
31 "go" => Some(Self::Go),
32 "hcl" | "tf" => Some(Self::Hcl),
33 "java" => Some(Self::Java),
34 "js" | "jsx" => Some(Self::JavaScript),
35 "json" => Some(Self::Json),
36 "kt" | "ktm" | "kts" => Some(Self::Kotlin),
37 "swift" => Some(Self::Swift),
38 "ts" | "tsx" => Some(Self::TypeScript),
39 "php" => Some(Self::Php),
40 "py" => Some(Self::Python),
41 "rb" => Some(Self::Ruby),
42 "rs" => Some(Self::Rust),
43 "scala" => Some(Self::Scala),
44 "yaml" | "yml" => Some(Self::Yaml),
45 _ => None,
46 }
47 }
48
49 pub(crate) fn syntax_dispatcher(self) -> Option<Dispatcher> {
50 match self {
51 Self::CSharp => Some(dispatchers::c_sharp::dispatcher),
52 Self::Java => Some(dispatchers::java::dispatcher),
53 Self::JavaScript => Some(dispatchers::javascript::dispatcher),
54 Self::Json => Some(dispatchers::json::dispatcher),
55 Self::Python => Some(dispatchers::python::dispatcher),
56 Self::TypeScript => Some(dispatchers::typescript::dispatcher),
57 Self::Yaml => Some(dispatchers::yaml::dispatcher),
58 _ => None,
59 }
60 }
61}