add support for Elm

pull/223/head
Alex Perkins 2022-04-01 11:44:43 +07:00
parent 3bdf8c3e80
commit d6e9afd3d6
8 changed files with 111 additions and 0 deletions

@ -109,6 +109,11 @@ fn main() {
src_dir: "vendor/tree-sitter-gleam-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-elm",
src_dir: "vendor/tree-sitter-elm-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-go",
src_dir: "vendor/tree-sitter-go-src",

@ -28,6 +28,9 @@ f4233ebbe6c46a7c07bc88eca20e4856 -
sample_files/elisp_contiguous_before.el sample_files/elisp_contiguous_after.el
e3946aef566a707c718edd7a86340566 -
sample_files/elm_before.elm sample_files/elm_after.elm
16777d5b5204b34cf7891b9fd476d9fc -
sample_files/hack_before.php sample_files/hack_after.php
b8c51005df7e1eaaeaf738a4353ac88f -

@ -0,0 +1,40 @@
module Main exposing (blue, list, x, y)
list : List Int
list =
[ 1
, 2
, 3
, 4
]
blue : a -> String
blue =
\_ -> "blue"
green : String
green =
"yellow" ++ "blue"
x : Int
x =
(*) 2 <| 4
y : Int
y =
4 |> (*) 2
fn :
()
-> Int
-> List String
-> ()
-> String
fn () n strings () =
String.join (String.fromInt n) strings

@ -0,0 +1,43 @@
module Main exposing (blue, green, list, x, y, z)
list : List Int
list =
[ 1, 2, 3 ]
blue : a -> String
blue =
always "blue"
green : a -> String
green =
always "blue"
y : Int
x =
(*) 2 4
y : Int
y =
(*) 2 4
z : String
z =
"abc"
fn : () -> Int -> List String -> String
fn _ n strings =
let
foo : List String -> String
foo =
String.join (String.fromInt n)
in
foo strings

@ -27,6 +27,7 @@ pub enum Language {
Css,
Dart,
Elixir,
Elm,
EmacsLisp,
Gleam,
Go,
@ -99,6 +100,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"dart" => Some(Dart),
"c++" => Some(CPlusPlus),
"elixir" => Some(Elixir),
"elm" => Some(Elm),
"emacs-lisp" => Some(EmacsLisp),
"gleam" => Some(Gleam),
"go" => Some(Go),
@ -196,6 +198,7 @@ pub fn from_extension(extension: &OsStr) -> Option<Language> {
"css" => Some(Css),
"dart" => Some(Dart),
"el" => Some(EmacsLisp),
"elm" => Some(Elm),
"ex" | "exs" => Some(Elixir),
"gleam" => Some(Gleam),
"go" => Some(Go),

@ -54,6 +54,7 @@ extern "C" {
fn tree_sitter_elisp() -> ts::Language;
fn tree_sitter_elixir() -> ts::Language;
fn tree_sitter_gleam() -> ts::Language;
fn tree_sitter_elm() -> ts::Language;
fn tree_sitter_go() -> ts::Language;
fn tree_sitter_haskell() -> ts::Language;
fn tree_sitter_janet_simple() -> ts::Language;
@ -256,6 +257,20 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Elm => {
let language = unsafe { tree_sitter_elm() };
TreeSitterConfig {
name: "Elm",
language,
atom_nodes: vec!["string_constant_expr"].into_iter().collect(),
delimiter_tokens: vec![("{", "}"), ("[", "]"), ("(", ")")],
highlight_query: ts::Query::new(
language,
include_str!("../vendor/highlights/elm.scm"),
)
.unwrap(),
}
}
Go => {
let language = unsafe { tree_sitter_go() };
TreeSitterConfig {

@ -0,0 +1 @@
../tree-sitter-elm/queries/highlights.scm

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