From 1a6979fdddebe991deabc8315ee161428a581a51 Mon Sep 17 00:00:00 2001 From: Mehdi Katranji Date: Tue, 26 Apr 2022 19:43:38 +0200 Subject: [PATCH 1/5] feat(lang): add hare language support --- languages.toml | 13 +++ runtime/queries/hare/highlights.scm | 118 ++++++++++++++++++++++++++++ runtime/queries/hare/indents.scm | 15 ++++ runtime/queries/hare/locals.scm | 20 +++++ 4 files changed, 166 insertions(+) create mode 100644 runtime/queries/hare/highlights.scm create mode 100644 runtime/queries/hare/indents.scm create mode 100644 runtime/queries/hare/locals.scm diff --git a/languages.toml b/languages.toml index d77b368639d6..c786da9c5816 100644 --- a/languages.toml +++ b/languages.toml @@ -1249,3 +1249,16 @@ language-server = { command = "vala-language-server" } [[grammar]] name = "vala" source = { git = "https://github.com/vala-lang/tree-sitter-vala", rev = "c9eea93ba2ec4ec1485392db11945819779745b3" } + +[[language]] +name = "hare" +scope = "source.hare" +injection-regex = "hare" +file-types = ["ha"] +roots = [] +comment-token = "//" +indent = { tab-width = 4, unit = "\t" } + +[[grammar]] +name = "hare" +source = { git = "https://git.sr.ht/~ecmma/tree-sitter-hare", rev = "bc26a6a949f2e0d98b7bfc437d459b250900a165" } diff --git a/runtime/queries/hare/highlights.scm b/runtime/queries/hare/highlights.scm new file mode 100644 index 000000000000..e58e746ea1a2 --- /dev/null +++ b/runtime/queries/hare/highlights.scm @@ -0,0 +1,118 @@ +"abort" @keyword +"alloc" @keyword +"append" @keyword +"as" @keyword +"assert" @keyword +"bool" @keyword +"break" @keyword +"char" @keyword +"const" @keyword +"continue" @keyword +"def" @keyword +"defer" @keyword +"delete" @keyword +"else" @keyword +"enum" @keyword +"export" @keyword +"f32" @type +"f64" @type +"false" @constant +"fn" @keyword +"for" @keyword +"free" @keyword +"i16" @type +"i32" @type +"i64" @type +"i8" @type +"if" @keyword +"int" @type +"is" @keyword +"len" @keyword +"let" @keyword +"match" @keyword +"null" @constant +"nullable" @keyword +"offset" @keyword +"return" @keyword +"rune" @type +"size" @keyword +"static" @keyword +"str" @type +"struct" @keyword +"switch" @keyword +"true" @keyword +"type" @keyword +"u16" @type +"u32" @type +"u64" @type +"u8" @type +"uint" @type +"uintptr" @type +"union" @keyword +"use" @keyword +"void" @type +"..." @special + +"." @operator +"!" @operator +"~" @operator +"?" @operator +"*" @operator +"/" @operator +"%" @operator +"+" @operator +"-" @operator +"<<" @operator +">>" @operator +"::" @operator +"<" @operator +"<=" @operator +">" @operator +">=" @operator +"==" @operator +"!=" @operator +"&" @operator +"|" @operator +"^" @operator +"&&" @operator +"||" @operator +"=" @operator +"+=" @operator +"-=" @operator +"*=" @operator +"/=" @operator +"%=" @operator +"&=" @operator +"|=" @operator +"<<=" @operator +">>=" @operator +"^=" @operator + +":" @delimiter +";" @delimiter +"{" @delimiter +"}" @delimiter + +(comment) @comment + +(string_constant) @string +(escape_sequence) @type +(rune_constant) @string +(integer_constant) @number +(floating_constant) @number + +(call_expression + (postfix_expression) @function) + +(function_declaration + name: (identifier) @function) + +(parameter (name) @variable.parameter) + +(field_access_expression + selector: (name) @field) +(decl_attr) @special +(fndec_attrs) @special + +(identifier) @variable + diff --git a/runtime/queries/hare/indents.scm b/runtime/queries/hare/indents.scm new file mode 100644 index 000000000000..a13b30f6c436 --- /dev/null +++ b/runtime/queries/hare/indents.scm @@ -0,0 +1,15 @@ +[ + (struct_union_fields) + (expression_list) +] @indent + + +[ + "{" + "}" +] @branch + +[ + (comment) +] @ignore + diff --git a/runtime/queries/hare/locals.scm b/runtime/queries/hare/locals.scm new file mode 100644 index 000000000000..b8b9b9f71420 --- /dev/null +++ b/runtime/queries/hare/locals.scm @@ -0,0 +1,20 @@ +(unit) @local.scope + +(function_declaration) @local.scope + +(global_binding + (identifier) @local.definition) +(constant_binding + (identifier) @local.definition) +(type_bindings + (identifier) @local.definition) + +(function_declaration + (prototype + (parameter_list + (parameters + (parameter + (name) @local.definition))))) + +(identifier) @local.reference + From 4f3dbe484c59670b156a34502eb290c180f04fe9 Mon Sep 17 00:00:00 2001 From: Mehdi Katranji Date: Tue, 26 Apr 2022 19:55:22 +0200 Subject: [PATCH 2/5] doc(lang): add hare language support --- book/src/generated/lang-support.md | 1 + 1 file changed, 1 insertion(+) diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 1df83913cb08..76866034e64d 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -27,6 +27,7 @@ | gomod | ✓ | | | `gopls` | | gowork | ✓ | | | `gopls` | | graphql | ✓ | | | | +| hare | ✓ | | | | | haskell | ✓ | | | `haskell-language-server-wrapper` | | hcl | ✓ | | ✓ | `terraform-ls` | | heex | ✓ | | | | From d85720285eee2452f107a7277be9889992154052 Mon Sep 17 00:00:00 2001 From: Mehdi Katranji Date: Tue, 26 Apr 2022 20:59:44 +0200 Subject: [PATCH 3/5] fix: improve highlights for hare language --- runtime/queries/hare/highlights.scm | 227 ++++++++++++++++------------ 1 file changed, 131 insertions(+), 96 deletions(-) diff --git a/runtime/queries/hare/highlights.scm b/runtime/queries/hare/highlights.scm index e58e746ea1a2..2a6af4080be2 100644 --- a/runtime/queries/hare/highlights.scm +++ b/runtime/queries/hare/highlights.scm @@ -1,105 +1,140 @@ -"abort" @keyword -"alloc" @keyword -"append" @keyword -"as" @keyword -"assert" @keyword -"bool" @keyword -"break" @keyword -"char" @keyword -"const" @keyword -"continue" @keyword -"def" @keyword -"defer" @keyword -"delete" @keyword -"else" @keyword -"enum" @keyword -"export" @keyword -"f32" @type -"f64" @type -"false" @constant -"fn" @keyword -"for" @keyword -"free" @keyword -"i16" @type -"i32" @type -"i64" @type -"i8" @type -"if" @keyword -"int" @type -"is" @keyword -"len" @keyword -"let" @keyword -"match" @keyword -"null" @constant -"nullable" @keyword -"offset" @keyword -"return" @keyword -"rune" @type -"size" @keyword -"static" @keyword -"str" @type -"struct" @keyword -"switch" @keyword -"true" @keyword -"type" @keyword -"u16" @type -"u32" @type -"u64" @type -"u8" @type -"uint" @type -"uintptr" @type -"union" @keyword -"use" @keyword -"void" @type -"..." @special +[ + "f32" + "f64" + "i16" + "i32" + "i64" + "i8" + "int" + "rune" + "str" + "u16" + "u32" + "u64" + "u8" + "uint" + "uintptr" + "void" +] @type + + +[ + "else" + "if" + "match" + "switch" +] @keyword.control.conditional + +[ + "export" + "use" +] @keyword.control.import + +[ + "continue" + "for" + "break" +] @keyword.control.repeat + +"return" @keyword.control.return + +[ + "abort" + "assert" +] @keyword.control.exception -"." @operator -"!" @operator -"~" @operator -"?" @operator -"*" @operator -"/" @operator -"%" @operator -"+" @operator -"-" @operator -"<<" @operator -">>" @operator -"::" @operator -"<" @operator -"<=" @operator -">" @operator -">=" @operator -"==" @operator -"!=" @operator -"&" @operator -"|" @operator -"^" @operator -"&&" @operator -"||" @operator -"=" @operator -"+=" @operator -"-=" @operator -"*=" @operator -"/=" @operator -"%=" @operator -"&=" @operator -"|=" @operator -"<<=" @operator -">>=" @operator -"^=" @operator - -":" @delimiter -";" @delimiter -"{" @delimiter -"}" @delimiter +[ + "def" + "fn" +] @keyword.function + +[ + "alloc" + "append" + "as" + "bool" + "char" + "const" + "defer" + "delete" + "enum" + "free" + "is" + "len" + "let" + "match" + "nullable" + "offset" + "size" + "static" + "struct" + "type" + "union" +] @keyword + +[ + "." + "!" + "~" + "?" + "*" + "/" + "%" + "+" + "-" + "<<" + ">>" + "::" + "<" + "<=" + ">" + ">=" + "==" + "!=" + "&" + "|" + "^" + "&&" + "||" + "=" + "+=" + "-=" + "*=" + "/=" + "%=" + "&=" + "|=" + "<<=" + ">>=" + "^=" + "=>" +] @operator + +[ + "{" + "}" +] @punctuation.bracket + +[ + ":" + ";" +] @punctuation.delimiter + +"..." @special (comment) @comment +[ + "false" + "null" + "true" +] @constant.builtin + (string_constant) @string -(escape_sequence) @type +(escape_sequence) @constant.character.escape (rune_constant) @string -(integer_constant) @number -(floating_constant) @number +(integer_constant) @constant.numeric.integer +(floating_constant) @constant.numeric.float (call_expression (postfix_expression) @function) From 02a8c08f85ac163378dcf6b3f693f68e63a4eaf9 Mon Sep 17 00:00:00 2001 From: Mehdi Katranji Date: Tue, 26 Apr 2022 21:16:06 +0200 Subject: [PATCH 4/5] doc(lang): hare language indent status --- book/src/generated/lang-support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md index 76866034e64d..741012e7973d 100644 --- a/book/src/generated/lang-support.md +++ b/book/src/generated/lang-support.md @@ -27,7 +27,7 @@ | gomod | ✓ | | | `gopls` | | gowork | ✓ | | | `gopls` | | graphql | ✓ | | | | -| hare | ✓ | | | | +| hare | ✓ | | ✓ | | | haskell | ✓ | | | `haskell-language-server-wrapper` | | hcl | ✓ | | ✓ | `terraform-ls` | | heex | ✓ | | | | From 662b0e607bfbfc21746a2c245f9822667ffdbda6 Mon Sep 17 00:00:00 2001 From: Mehdi Katranji Date: Tue, 26 Apr 2022 21:41:58 +0200 Subject: [PATCH 5/5] fix(lang): hare language --- runtime/queries/hare/highlights.scm | 7 ++++++- runtime/queries/hare/indents.scm | 18 ++++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/runtime/queries/hare/highlights.scm b/runtime/queries/hare/highlights.scm index 2a6af4080be2..cd3c1d0a0718 100644 --- a/runtime/queries/hare/highlights.scm +++ b/runtime/queries/hare/highlights.scm @@ -111,6 +111,11 @@ ] @operator [ + "(" + ")" + "[" + "]" + ")" "{" "}" ] @punctuation.bracket @@ -145,7 +150,7 @@ (parameter (name) @variable.parameter) (field_access_expression - selector: (name) @field) + selector: (name) @variable.other.member) (decl_attr) @special (fndec_attrs) @special diff --git a/runtime/queries/hare/indents.scm b/runtime/queries/hare/indents.scm index a13b30f6c436..a2e83c000f26 100644 --- a/runtime/queries/hare/indents.scm +++ b/runtime/queries/hare/indents.scm @@ -3,13 +3,19 @@ (expression_list) ] @indent - [ - "{" + "case" "}" -] @branch + "]" + ")" +] @outdent -[ - (comment) -] @ignore +; [ +; "{" +; "}" +; ] @branch + +; [ +; (comment) +; ] @ignore