aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--book/src/generated/lang-support.md1
-rw-r--r--languages.toml13
-rw-r--r--runtime/queries/hare/highlights.scm158
-rw-r--r--runtime/queries/hare/indents.scm21
-rw-r--r--runtime/queries/hare/locals.scm20
5 files changed, 213 insertions, 0 deletions
diff --git a/book/src/generated/lang-support.md b/book/src/generated/lang-support.md
index 1df83913..741012e7 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 | ✓ | | | |
diff --git a/languages.toml b/languages.toml
index d77b3686..c786da9c 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 00000000..cd3c1d0a
--- /dev/null
+++ b/runtime/queries/hare/highlights.scm
@@ -0,0 +1,158 @@
+[
+ "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
+
+[
+ "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) @constant.character.escape
+(rune_constant) @string
+(integer_constant) @constant.numeric.integer
+(floating_constant) @constant.numeric.float
+
+(call_expression
+ (postfix_expression) @function)
+
+(function_declaration
+ name: (identifier) @function)
+
+(parameter (name) @variable.parameter)
+
+(field_access_expression
+ selector: (name) @variable.other.member)
+(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 00000000..a2e83c00
--- /dev/null
+++ b/runtime/queries/hare/indents.scm
@@ -0,0 +1,21 @@
+[
+ (struct_union_fields)
+ (expression_list)
+] @indent
+
+[
+ "case"
+ "}"
+ "]"
+ ")"
+] @outdent
+
+; [
+; "{"
+; "}"
+; ] @branch
+
+; [
+; (comment)
+; ] @ignore
+
diff --git a/runtime/queries/hare/locals.scm b/runtime/queries/hare/locals.scm
new file mode 100644
index 00000000..b8b9b9f7
--- /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
+