From 7ed685ae528d97def3fb8fef89ca94e688cb6def Mon Sep 17 00:00:00 2001 From: Ember Sawady Date: Sat, 10 Sep 2022 15:47:20 +0000 Subject: [PATCH] Add support for Hare --- build.rs | 5 +++++ sample_files/compare.expected | 3 +++ sample_files/hare_after.ha | 14 ++++++++++++++ sample_files/hare_before.ha | 5 +++++ src/parse/guess_language.rs | 3 +++ src/parse/tree_sitter_parser.rs | 14 ++++++++++++++ vendor/highlights/hare.scm | 1 + vendor/tree-sitter-hare-src | 1 + 8 files changed, 46 insertions(+) create mode 100644 sample_files/hare_after.ha create mode 100644 sample_files/hare_before.ha create mode 120000 vendor/highlights/hare.scm create mode 120000 vendor/tree-sitter-hare-src diff --git a/build.rs b/build.rs index 96707455d..1f44bdf4b 100644 --- a/build.rs +++ b/build.rs @@ -202,6 +202,11 @@ fn main() { src_dir: "vendor/tree-sitter-hack-src", extra_files: vec!["scanner.cc"], }, + TreeSitterParser { + name: "tree-sitter-hare", + src_dir: "vendor/tree-sitter-hare-src", + extra_files: vec![], + }, TreeSitterParser { name: "tree-sitter-haskell", src_dir: "vendor/tree-sitter-haskell-src", diff --git a/sample_files/compare.expected b/sample_files/compare.expected index 3639717e9..c173833c9 100644 --- a/sample_files/compare.expected +++ b/sample_files/compare.expected @@ -46,6 +46,9 @@ bfb410815de1fb0fd47fa078fbd8e329 - sample_files/hack_before.php sample_files/hack_after.php 50babcb945cf3b3ba12d5481a1bf8ccf - +sample_files/hare_before.ha sample_files/hare_after.ha +8edc2f3ae2eaeba7bcf328ed00398767 - + sample_files/haskell_before.hs sample_files/haskell_after.hs 324d1c9b2a04133a75b1975272ffb6ad - diff --git a/sample_files/hare_after.ha b/sample_files/hare_after.ha new file mode 100644 index 000000000..825bb24d2 --- /dev/null +++ b/sample_files/hare_after.ha @@ -0,0 +1,14 @@ +use fmt; + +export fn main() void = { + const greetings = [ + "Hello, world!", + "¡Hola Mundo!", + "Γειά σου Κόσμε!", + "Привет, мир!", + "こんにちは世界!", + ]; + for (let i = 0z; i < len(greetings); i += 1) { + fmt::println(greetings[i])!; + }; +}; diff --git a/sample_files/hare_before.ha b/sample_files/hare_before.ha new file mode 100644 index 000000000..4e405892b --- /dev/null +++ b/sample_files/hare_before.ha @@ -0,0 +1,5 @@ +use fmt; + +export fn main() void = { + fmt::println("Hello, world!"); +}; diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 19fee1d03..23c3eec2c 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -34,6 +34,7 @@ pub enum Language { Gleam, Go, Hack, + Hare, Haskell, Hcl, Html, @@ -85,6 +86,7 @@ pub fn language_name(language: Language) -> &'static str { Gleam => "Gleam", Go => "Go", Hack => "Hack", + Hare => "Hare", Haskell => "Haskell", Hcl => "HCL", Html => "HTML", @@ -149,6 +151,7 @@ pub const LANG_EXTENSIONS: &'static [(Language, &[&str])] = &[ (Gleam, &["gleam"]), (Go, &["go"]), (Hack, &["hack", "hck", "hhi"]), + (Hare, &["ha"]), (Haskell, &["hs"]), (Hcl, &["hcl", "nomad", "tf", "tfvars", "workflow"]), (Html, &["html", "htm", "xhtml"]), diff --git a/src/parse/tree_sitter_parser.rs b/src/parse/tree_sitter_parser.rs index 92a49db1d..a6f493c4c 100644 --- a/src/parse/tree_sitter_parser.rs +++ b/src/parse/tree_sitter_parser.rs @@ -55,6 +55,7 @@ extern "C" { fn tree_sitter_elvish() -> ts::Language; fn tree_sitter_gleam() -> ts::Language; fn tree_sitter_go() -> ts::Language; + fn tree_sitter_hare() -> ts::Language; fn tree_sitter_hack() -> ts::Language; fn tree_sitter_haskell() -> ts::Language; fn tree_sitter_hcl() -> ts::Language; @@ -327,6 +328,19 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig { .unwrap(), } } + Hare => { + let language = unsafe { tree_sitter_hare() }; + TreeSitterConfig { + language, + atom_nodes: vec!["string_constant", "rune_constant"].into_iter().collect(), + delimiter_tokens: vec![("[", "]"), ("(", ")"), ("{", "}")], + highlight_query: ts::Query::new( + language, + include_str!("../../vendor/highlights/hare.scm"), + ) + .unwrap(), + } + } Haskell => { let language = unsafe { tree_sitter_haskell() }; TreeSitterConfig { diff --git a/vendor/highlights/hare.scm b/vendor/highlights/hare.scm new file mode 120000 index 000000000..c4cd781c3 --- /dev/null +++ b/vendor/highlights/hare.scm @@ -0,0 +1 @@ +../tree-sitter-hare/queries/highlights.scm \ No newline at end of file diff --git a/vendor/tree-sitter-hare-src b/vendor/tree-sitter-hare-src new file mode 120000 index 000000000..33b676a73 --- /dev/null +++ b/vendor/tree-sitter-hare-src @@ -0,0 +1 @@ +tree-sitter-hare/src/ \ No newline at end of file