summaryrefslogtreecommitdiff
path: root/web/assets/zig.scm
blob: a85383a7f2df81295c4637187c3b3157e632d2af (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
; Zig highlights, from tree-sitter-grammars/tree-sitter-zig v1.1.2
; queries/highlights.scm (MIT). Reordered for later-patterns-win, capture names
; mapped onto zed syntax keys — upstream's keyword.* split collapses to
; @keyword, which zed themes colour as one — and the #lua-match? identifier
; heuristics rewritten as #match?, which this engine evaluates.

["(" ")" "[" "]" "{" "}"] @punctuation.bracket
(payload "|" @punctuation.bracket)
[";" "," "." ":" "=>" "->"] @punctuation.delimiter
["=" "==" "!=" "<" ">" "<=" ">=" "+" "+%" "+|" "-" "-%" "-|" "*" "*%" "*|"
 "**" "/" "%" "&" "|" "^" "~" "!" "||" "<<" "<<|" ">>" ".." ".*" ".?" "?"
 "+=" "+%=" "+|=" "-=" "-%=" "-|=" "*=" "*%=" "*|=" "/=" "%=" "&=" "|=" "^="
 "<<=" "<<|=" ">>="] @operator

["addrspace" "align" "allowzero" "and" "asm" "async" "await" "break"
 "callconv" "catch" "comptime" "const" "continue" "defer" "else" "enum"
 "errdefer" "error" "export" "extern" "fn" "for" "if" "inline" "linksection"
 "noalias" "noinline" "nosuspend" "opaque" "or" "orelse" "packed" "pub"
 "resume" "return" "struct" "suspend" "switch" "test" "threadlocal" "try"
 "union" "usingnamespace" "var" "volatile" "while"] @keyword

(builtin_type) @type
["anyframe" "anytype"] @type
(parameter type: (identifier) @type)
(variable_declaration (identifier) @type "="
  [(struct_declaration) (enum_declaration) (union_declaration)
   (opaque_declaration)])

["null" "undefined" "unreachable"] @constant
(boolean) @constant
; an enum literal — .ok — is a member with nothing to its left
(field_expression . member: (identifier) @constant)
(enum_declaration (container_field type: (identifier) @constant))

(container_field name: (identifier) @property)
(field_initializer . (identifier) @property)
(field_expression (_) member: (identifier) @property)
; .x = 1 inside a Point{...} is a field, not the enum literal above
(initializer_list
  (assignment_expression
    left: (field_expression . member: (identifier) @property)))
(parameter name: (identifier) @variable.parameter)
(block_label (identifier) @label)
(break_label (identifier) @label)

(function_declaration name: (identifier) @function)
(call_expression function: (identifier) @function)
(call_expression function: (field_expression member: (identifier) @function.method))
(builtin_identifier) @function.builtin

; Zig has no type-identifier node, only the TitleCase convention, and these
; land after the call patterns so that the convention wins the way upstream's
; first-pattern-wins order has it: std.ArrayList(u8) is a type, not a call.
((identifier) @type
 (#match? @type "^[A-Z][a-zA-Z0-9_]*$"))
((identifier) @constant
 (#match? @constant "^[A-Z][A-Z0-9_]+$"))

[(integer) (float)] @number
[(string) (multiline_string) (character)] @string
(escape_sequence) @string.escape

(comment) @comment
((comment) @comment.doc
 (#match? @comment.doc "^//[/!]"))