Add basic Erlang support

Add tree-sitter and configure language detection. Helps with #394

Co-authored-by: Benedikt Reinartz <filmor@gmail.com>
pull/454/head
Wilfred Hughes 2022-12-14 23:51:26 +07:00
parent db3a1db04e
commit e6cec41e23
4 changed files with 26 additions and 0 deletions

@ -191,6 +191,11 @@ fn main() {
src_dir: "vendor/tree-sitter-elvish-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-erlang",
src_dir: "vendor/tree-sitter-erlang-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-gleam",
src_dir: "vendor/tree-sitter-gleam-src",

@ -31,6 +31,7 @@ pub enum Language {
Elm,
Elvish,
EmacsLisp,
Erlang,
Gleam,
Go,
Hack,
@ -83,6 +84,7 @@ pub fn language_name(language: Language) -> &'static str {
Elm => "Elm",
Elvish => "Elvish",
EmacsLisp => "Emacs Lisp",
Erlang => "Erlang",
Gleam => "Gleam",
Go => "Go",
Hack => "Hack",
@ -148,6 +150,12 @@ pub const LANG_EXTENSIONS: &[(Language, &[&str])] = &[
(EmacsLisp, &["el"]),
(Elixir, &["ex", "exs"]),
(Elvish, &["elv"]),
// TODO: confirm that we support multiple extensions for files
// like foo.app.src.
(
Erlang,
&["erl", "app.src", "es", "escript", "hrl", "xrl", "yrl"],
),
(Gleam, &["gleam"]),
(Go, &["go"]),
(Hack, &["hack", "hck", "hhi"]),
@ -303,6 +311,7 @@ fn from_shebang(src: &str) -> Option<Language> {
"lisp" | "sbc" | "ccl" | "clisp" | "ecl" => return Some(CommonLisp),
"elixir" => return Some(Elixir),
"elvish" => return Some(Elvish),
"escript" => return Some(Erlang),
"hhvm" => return Some(Hack),
"runghc" | "runhaskell" | "runhugs" => return Some(Haskell),
"chakra" | "d8" | "gjs" | "js" | "node" | "nodejs" | "qjs" | "rhino" | "v8"
@ -338,6 +347,7 @@ fn from_name(path: &Path) -> Option<Language> {
| "zprofile" | "zshenv" | "zshrc" => Some(Bash),
"CMakeLists.txt" => Some(CMake),
".emacs" | "_emacs" | "Cask" => Some(EmacsLisp),
"Emakefile" | "rebar.config" | "rebar.config.lock" | "rebar.lock" => Some(Erlang),
".arcconfig" | ".auto-changelog" | ".c8rc" | ".htmlhintrc" | ".imgbotconfig"
| ".nycrc" | ".tern-config" | ".tern-project" | ".watchmanconfig" | "Pipfile.lock"
| "composer.lock" | "mcmod.info" => Some(Json),

@ -53,6 +53,7 @@ extern "C" {
fn tree_sitter_elixir() -> ts::Language;
fn tree_sitter_elm() -> ts::Language;
fn tree_sitter_elvish() -> ts::Language;
fn tree_sitter_erlang() -> ts::Language;
fn tree_sitter_gleam() -> ts::Language;
fn tree_sitter_go() -> ts::Language;
fn tree_sitter_hare() -> ts::Language;
@ -285,6 +286,15 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Erlang => {
let language = unsafe { tree_sitter_erlang() };
TreeSitterConfig {
language,
atom_nodes: [].into(),
delimiter_tokens: vec![("(", ")")],
highlight_query: ts::Query::new(language, "").unwrap(),
}
}
Gleam => {
let language = unsafe { tree_sitter_gleam() };
TreeSitterConfig {

@ -0,0 +1 @@
tree-sitter-erlang/src