; ---------- ; Primitives ; ---------- [ (line_comment) (block_comment) ] @comment (((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|missing|Inf|NaN)$")) (((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true")) (((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false")) (integer_literal) @constant.numeric.integer (float_literal) @constant.numeric.float (character_literal) @constant.character (escape_sequence) @constant.character.escape (string_literal) @string (prefixed_string_literal prefix: (identifier) @function.macro) @string (quote_expression (identifier) @string.special.symbol) ; ------------------- ; Modules and Imports ; ------------------- (module_definition name: (identifier) @namespace) (import_statement (identifier) @namespace) (selected_import . (identifier) @namespace) (scoped_identifier (identifier) @namespace) ; ----- ; Types ; ----- (abstract_definition name: (identifier) @type) (primitive_definition name: (identifier) @type) (struct_definition name: (identifier) @type) (struct_definition . (_) (identifier) @variable.other.member) (struct_definition . (_) (typed_expression . (identifier) @variable.other.member)) (type_parameter_list (identifier) @type) (constrained_parameter (identifier) @type) (subtype_clause (identifier) @type) (typed_expression (identifier) @type . ) (parameterized_identifier (identifier) @type) (type_argument_list (identifier) @type) ; ------------------- ; Function definition ; ------------------- (function_definition name: (identifier) @function) (parameter_list (identifier) @variable.parameter) (typed_parameter (identifier) @variable.parameter (identifier)? @type) (optional_parameter . (identifier) @variable.parameter) (spread_parameter (identifier) @variable.parameter) (function_expression . (identifier) @variable.parameter) ; --------------- ; Functions calls ; --------------- (call_expression (identifier) @function) (broadcast_call_expression (identifier) @function) (call_expression (field_expression (identifier) @function .)) (broadcast_call_expression (field_expression (identifier) @function .)) ; ------ ; Macros ; ------ (macro_definition name: (identifier) @function.macro) (macro_identifier "@" @function.macro (identifier) @function.macro) ; -------- ; Keywords ; -------- (function_definition ["function" "end"] @keyword.function) (if_statement ["if" "end"] @keyword.control.conditional) (elseif_clause ["elseif"] @keyword.control.conditional) (else_clause ["else"] @keyword.control.conditional) (ternary_expression ["?" ":"] @keyword.control.conditional) (for_statement ["for" "end"] @keyword.control.repeat) (while_statement ["while" "end"] @keyword.control.repeat) (break_statement) @keyword.control.repeat (continue_statement) @keyword.control.repeat (for_binding "in" @keyword.control.repeat) (for_clause "for" @keyword.control.repeat) (try_statement ["try" "end" ] @keyword.control.exception) (finally_clause "finally" @keyword.control.exception) (catch_clause "catch" @keyword.control.exception) [ "export" "import" "using" ] @keyword.control.import [ "abstract" "begin" "const" "do" "end" "let" "macro" "module" "mutable" "primitive" "quote" "return" "struct" "type" ] @keyword ; TODO: fix this ((identifier) @keyword (match? @keyword "global|local")) ; --------- ; Operators ; --------- [ (operator) "::" "<:" ":" "=>" "..." "$" ] @operator ; ------------ ; Punctuations ; ------------ [ "." "," ";" ] @punctuation.delimiter [ "[" "]" "(" ")" "{" "}" ] @punctuation.bracket ; --------------------- ; Remaining identifiers ; --------------------- ; could also be namespace but this should cover the majority (field_expression . (_) (identifier) @variable.other.member) (const_statement (variable_declaration . (identifier) @constant)) ((identifier) @type (match? @type "([A-Z][a-z0-9]+)+$")) ((identifier) @constant (match? @constant "^[A-Z][A-Z0-9_]+$")) (identifier) @variable