fluidattacks_blends_domain/
language.rs1use crate::syntax::dispatchers::{self, Dispatcher};
4
5#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
10#[non_exhaustive]
11pub enum Language {
12 CSharp,
14 Elixir,
16 Go,
18 Hcl,
20 Java,
22 JavaScript,
24 Json,
26 Kotlin,
28 Php,
30 Python,
32 Ruby,
34 Rust,
36 Scala,
38 Swift,
40 TypeScript,
42 Yaml,
44}
45
46impl Language {
47 #[must_use]
49 pub fn from_extension(extension: &str) -> Option<Self> {
50 match extension {
51 "cs" => Some(Self::CSharp),
52 "ex" | "exs" => Some(Self::Elixir),
53 "go" => Some(Self::Go),
54 "hcl" | "tf" => Some(Self::Hcl),
55 "java" => Some(Self::Java),
56 "js" | "jsx" => Some(Self::JavaScript),
57 "json" => Some(Self::Json),
58 "kt" | "ktm" | "kts" => Some(Self::Kotlin),
59 "swift" => Some(Self::Swift),
60 "ts" | "tsx" => Some(Self::TypeScript),
61 "php" => Some(Self::Php),
62 "py" => Some(Self::Python),
63 "rb" => Some(Self::Ruby),
64 "rs" => Some(Self::Rust),
65 "scala" => Some(Self::Scala),
66 "yaml" | "yml" => Some(Self::Yaml),
67 _ => None,
68 }
69 }
70
71 pub(crate) fn syntax_dispatcher(self) -> Option<Dispatcher> {
72 match self {
73 Self::CSharp => Some(dispatchers::c_sharp::dispatcher),
74 Self::Go => Some(dispatchers::go::dispatcher),
75 Self::Java => Some(dispatchers::java::dispatcher),
76 Self::JavaScript => Some(dispatchers::javascript::dispatcher),
77 Self::Json => Some(dispatchers::json::dispatcher),
78 Self::Kotlin => Some(dispatchers::kotlin::dispatcher),
79 Self::Php => Some(dispatchers::php::dispatcher),
80 Self::Python => Some(dispatchers::python::dispatcher),
81 Self::Ruby => Some(dispatchers::ruby::dispatcher),
82 Self::Rust => Some(dispatchers::rust::dispatcher),
83 Self::Swift => Some(dispatchers::swift::dispatcher),
84 Self::TypeScript => Some(dispatchers::typescript::dispatcher),
85 Self::Yaml => Some(dispatchers::yaml::dispatcher),
86 _ => None,
87 }
88 }
89}