diff options
Diffstat (limited to 'runtime/queries/hare/highlights.scm')
| -rw-r--r-- | runtime/queries/hare/highlights.scm | 272 |
1 files changed, 272 insertions, 0 deletions
diff --git a/runtime/queries/hare/highlights.scm b/runtime/queries/hare/highlights.scm new file mode 100644 index 000000000..deaecd283 --- /dev/null +++ b/runtime/queries/hare/highlights.scm @@ -0,0 +1,272 @@ +; Variables +(identifier) @variable + +; Types +(type) @type + +(scoped_type_identifier + (identifier) + . + (identifier) @type) + +(struct_literal + . + (identifier) @type) + +(builtin_type) @type.builtin + +; Constants +((identifier) @constant + (#lua-match? @constant "^[A-Z_]+$")) + +; Includes +[ + "use" + "export" +] @keyword.import + +(use_statement + (scoped_type_identifier + (identifier) @module)) + +(use_statement + (identifier) @module + "{") + +(use_statement + . + (identifier) @module .) + +((scoped_type_identifier + path: (_) @module) + (#set! priority 105)) + +; Keywords +[ + "def" + "let" +] @keyword + +[ + "enum" + "struct" + "union" + "type" +] @keyword.type + +"fn" @keyword.function + +[ + "defer" + "yield" + "return" +] @keyword.return + +[ + "as" + "is" +] @keyword.operator + +; Typedefs +(type_declaration + "type" + (identifier) @type.definition + . + "=") + +; Qualifiers +[ + "const" + "static" + "nullable" +] @keyword.modifier + +; Attributes +[ + "@fini" + "@init" + "@test" + "@noreturn" + "@packed" + (declaration_attribute) +] @attribute + +; Labels +((label) @label + (#set! priority 105)) + +; Functions +(function_declaration + "fn" + . + (identifier) @function) + +(call_expression + . + (identifier) @function.call) + +(call_expression + . + (scoped_type_identifier + . + (identifier) + . + "::" + . + (identifier) @function.method.call)) + +((call_expression + . + (identifier) @function.builtin) + (#any-of? @function.builtin "align" "assert" "free" "len" "offset" "size")) + +(size_expression + "size" @function.builtin) + +((function_declaration + "fn" + . + (identifier) @constructor) + (#eq? @constructor "init")) + +((call_expression + . + (identifier) @constructor) + (#eq? @constructor "init")) + +; Parameters +(parameter + (_) @variable.parameter + . + ":") + +; Fields +((member_expression + "." + (_) @variable.member) + (#set! priority 105)) + +(field + . + (identifier) @variable.member) + +(field_assignment + . + (identifier) @variable.member) + +; Repeats +"for" @keyword.repeat + +; Conditionals +[ + "if" + "else" + "break" + "switch" + "match" + "case" +] @keyword.conditional + +; Operators +[ + "+" + "-" + "*" + "/" + "%" + "||" + "&&" + "^^" + "|" + "&" + "^" + "==" + "!=" + ">" + ">=" + "<=" + "<" + "<<" + ">>" + "~" + "!" + "+=" + "-=" + "*=" + "/=" + "%=" + "<<=" + ">>=" + "|=" + "&=" + "^=" + "||=" + "&&=" + "^^=" + "=" + "?" +] @operator + +; Punctuation +[ + "{" + "}" +] @punctuation.bracket + +[ + "[" + "]" +] @punctuation.bracket + +[ + "(" + ")" +] @punctuation.bracket + +[ + ".." + "..." + "_" +] @punctuation.special + +(pointer_type + "*" @punctuation.special) + +(slice_type + "*" @punctuation.special) + +(error_type + "!" @punctuation.special) + +[ + "," + "." + ":" + ";" + "::" + "=>" +] @punctuation.delimiter + +; Literals +[ + (string) + (raw_string) +] @string + +(rune) @character + +(escape_sequence) @string.escape + +(number) @number + +(float) @number.float + +(boolean) @boolean + +[ + (void) + (null) +] @constant.builtin + +; Comments +(comment) @comment @spell |
