use crate::syntax::dispatchers::{self, Dispatcher};
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
pub enum Language {
CSharp,
Elixir,
Go,
Hcl,
Java,
JavaScript,
Json,
Kotlin,
Php,
Python,
Ruby,
Rust,
Scala,
Swift,
TypeScript,
Yaml,
}
impl Language {
#[must_use]
pub fn from_extension(extension: &str) -> Option<Self> {
match extension {
"cs" => Some(Self::CSharp),
"ex" | "exs" => Some(Self::Elixir),
"go" => Some(Self::Go),
"hcl" | "tf" => Some(Self::Hcl),
"java" => Some(Self::Java),
"js" | "jsx" => Some(Self::JavaScript),
"json" => Some(Self::Json),
"kt" | "ktm" | "kts" => Some(Self::Kotlin),
"swift" => Some(Self::Swift),
"ts" | "tsx" => Some(Self::TypeScript),
"php" => Some(Self::Php),
"py" => Some(Self::Python),
"rb" => Some(Self::Ruby),
"rs" => Some(Self::Rust),
"scala" => Some(Self::Scala),
"yaml" | "yml" => Some(Self::Yaml),
_ => None,
}
}
pub(crate) fn syntax_dispatcher(self) -> Option<Dispatcher> {
match self {
Self::CSharp => Some(dispatchers::c_sharp::dispatcher),
Self::Java => Some(dispatchers::java::dispatcher),
Self::JavaScript => Some(dispatchers::javascript::dispatcher),
Self::Json => Some(dispatchers::json::dispatcher),
Self::Python => Some(dispatchers::python::dispatcher),
Self::TypeScript => Some(dispatchers::typescript::dispatcher),
Self::Yaml => Some(dispatchers::yaml::dispatcher),
_ => None,
}
}
}