(comment) @comment

[
  (string)
  (multiline_string)
] @string

(character) @string
(escape_sequence) @string.escape

[
  (integer)
  (float)
] @number

(boolean) @boolean

[
  (null)
  (unreachable)
  (undefined)
] @constant.builtin

(builtin_type) @type.builtin
(named_type) @type

(named_type
  (qualified_identifier
    (identifier) @function .)
  (argument_list))

(struct_literal
  type: (qualified_identifier
    (identifier) @function .)
  (argument_list))

(type_declaration name: (identifier) @type)
(function_declaration name: (identifier) @function)
(test_declaration name: (identifier) @function)
(parameter name: (identifier) @variable.parameter)

(intrinsic_call_expression function: (identifier) @function.builtin)
(call_expression function: (expression (identifier) @function))
(call_expression function: (expression (field_expression field: (identifier) @function)))
(field_expression field: (identifier) @property)
(field_expression field: (integer) @property)
(field_initializer name: (identifier) @property)
(keyed_field_initializer name: (identifier) @property)
(record_field name: (identifier) @property)
(enum_member name: (identifier) @property)
(enum_literal name: (identifier) @property)

(import_declaration alias: (identifier) @variable)
(opaque_type) @keyword

[
  "func"
	"test"
  "c_func"
  "struct"
  "c_struct"
  "union"
  "enum"
  "distinct"
  "alias"
  "import"
  "hide"
  "return"
  "try"
  "catch"
  "mut"
  "orelse"
  "and"
  "or"
  "if"
  "while"
  "for"
  "expand"
  "break"
  "continue"
  "defer"
  "errdefer"
  "yield"
  "match"
  "else"
] @keyword

[
  "::"
  "="
  "+="
  "-="
  "*="
  "/="
  "=="
  "!="
  "<"
  "<="
  ">"
  ">="
  "+"
  "-"
  "*"
  "/"
  "!"
  "&"
  "@"
  "?"
  "^"
  ".."
  "..="
  "|"
] @operator

[
  "("
  ")"
  "["
  "]"
  "{"
  "}"
] @punctuation.bracket

[
  ","
  "."
  ":"
  ";"
] @punctuation.delimiter
