@@ -1,112 +1,142 @@
10+(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|missing|Inf|NaN)$"))
11+(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true"))
12+(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false"))
14+(integer_literal) @constant.numeric.integer
15+(float_literal) @constant.numeric.float
17+(character_literal) @constant.character
18+(escape_sequence) @constant.character.escape
2(string_literal) @string
20(string_literal) @string
4(prefixed_string_literal
22(prefixed_string_literal
5− prefix: (identifier) @constant.builtin)
23+ prefix: (identifier) @function.macro) @string
7−(macro_identifier) @function.macro
25+(quote_expression
8−(macro_identifier (identifier) @function.macro) ; for any one using the variable highlight
26+ (identifier) @string.special.symbol)
33+ name: (identifier) @namespace)
36+ (identifier) @namespace)
39+ . (identifier) @namespace)
42+ (identifier) @namespace)
10− name: (identifier) @function.macro
49+ name: (identifier) @type)
11− ["macro" "end" @keyword])
50+
52+ name: (identifier) @type)
13−(field_expression
54+(struct_definition
14− (identifier)
55+ name: (identifier) @type)
59+ (identifier) @variable.other.member)
15− (identifier) @variable.other.member .)
64+ . (identifier) @variable.other.member))
69+(constrained_parameter
76+ (identifier) @type . )
78+(parameterized_identifier
17(function_definition
88(function_definition
18 name: (identifier) @function)
89 name: (identifier) @function)
20− (identifier) @function)
22− (field_expression (identifier) @function.method .))
23−(broadcast_call_expression
24− (identifier) @function)
25−(broadcast_call_expression
26− (field_expression (identifier) @function.method .))
27(parameter_list
91(parameter_list
28 (identifier) @variable.parameter)
92 (identifier) @variable.parameter)
30− (optional_parameter .
31− (identifier) @variable.parameter))
33− (identifier) @variable.parameter
37(typed_parameter
94(typed_parameter
38 (identifier) @variable.parameter
95 (identifier) @variable.parameter
39− (parameterized_identifier) @type)
96+ (identifier)? @type)
40−(function_expression
97+
41 . (identifier) @variable.parameter)
99 . (identifier) @variable.parameter)
42−(spread_parameter) @variable.parameter
100+
43(spread_parameter
101(spread_parameter
44 (identifier) @variable.parameter)
102 (identifier) @variable.parameter)
46− . (identifier) @variable.parameter)
49− (identifier) @variable.parameter
53− (identifier) @variable.parameter
54− (parameterized_identifier) @type))
56−;; Symbol expressions (:my-wanna-be-lisp-keyword)
104+(function_expression
57−(quote_expression
105+ . (identifier) @variable.parameter)
58− (identifier)) @string.special.symbol
60−;; Parsing error! foo (::Type) get's parsed as two quote expressions
107+; ---------------
61−(argument_list
108+; Functions calls
62− (quote_expression
109+; ---------------
64− (identifier) @type)))
66−(type_argument_list
111+(call_expression
67− (identifier) @type)
112+ (identifier) @function)
68−(parameterized_identifier (_)) @type
70− (typed_expression . (identifier) @variable.parameter))
72−(typed_expression
114+(broadcast_call_expression
73− (identifier) @type .)
115+ (identifier) @function)
75− (parameterized_identifier) @type .)
77−(struct_definition
117+(call_expression
78− name: (identifier) @type)
118+ (field_expression (identifier) @function .))
80−(integer_literal) @constant.numeric.integer
120+(broadcast_call_expression
81−(float_literal) @constant.numeric.float
121+ (field_expression (identifier) @function .))
128+ name: (identifier) @function.macro)
83−(range_expression
130+(macro_identifier
84− (identifier) @constant.numeric.integer
131+ "@" @function.macro
85− (eq? @constant.numeric.integer "end"))
88− (identifier) @constant.numeric.integer
89− (eq? @constant.numeric.integer "end")))
90−(coefficient_expression
95− (identifier) @constant.builtin)
132+ (identifier) @function.macro)
97−;; TODO: operators.
134+; --------
98−;; Those are a bit difficult to implement since the respective nodes are hidden right now (_power_operator)
135+; Keywords
99−;; and heavily use Unicode chars (support for those are bad in vim/lua regexes)
136+; --------
101− ;(power_operator);
138+(function_definition
105− ;(comparison_operator);
109−"end" @keyword
139+ ["function" "end"] @keyword.function)
111(if_statement
141(if_statement
112 ["if" "end"] @keyword.control.conditional)
142 ["if" "end"] @keyword.control.conditional)
@@ -117,36 +147,6 @@
117(ternary_expression
147(ternary_expression
118 ["?" ":"] @keyword.control.conditional)
148 ["?" ":"] @keyword.control.conditional)
120−(function_definition ["function" "end"] @keyword.function)
136−((identifier) @keyword (match? @keyword "global|local"))
139− ["begin" "end"] @keyword)
141− ["try" "end" ] @keyword.control.exception)
143− "finally" @keyword.control.exception)
145− "catch" @keyword.control.exception)
147− ["quote" "end"] @keyword)
149− ["let" "end"] @keyword)
150(for_statement
150(for_statement
151 ["for" "end"] @keyword.control.repeat)
151 ["for" "end"] @keyword.control.repeat)
152(while_statement
152(while_statement
@@ -157,33 +157,90 @@
157 "in" @keyword.control.repeat)
157 "in" @keyword.control.repeat)
158(for_clause
158(for_clause
159 "for" @keyword.control.repeat)
159 "for" @keyword.control.repeat)
161− ["do" "end"] @keyword)
163−(export_statement
161+(try_statement
164− ["export"] @keyword.control.import)
162+ ["try" "end" ] @keyword.control.exception)
164+ "finally" @keyword.control.exception)
166+ "catch" @keyword.control.exception)
167− "using"
169+ "export"
170] @keyword.control.import
172] @keyword.control.import
172−((identifier) @keyword.control.import (#eq? @keyword.control.import "baremodule"))
192+((identifier) @keyword (match? @keyword "global|local"))
174−(((identifier) @constant.builtin) (match? @constant.builtin "^(nothing|Inf|NaN)$"))
194+; ---------
175−(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "true"))
195+; Operators
176−(((identifier) @constant.builtin.boolean) (#eq? @constant.builtin.boolean "false"))
196+; ---------
216+] @punctuation.delimiter
225+] @punctuation.bracket
227+; ---------------------
228+; Remaining identifiers
229+; ---------------------
231+; could also be namespace but this should cover the majority
234+ (identifier) @variable.other.member)
237+ (variable_declaration
238+ . (identifier) @constant))
179−["::" ":" "." "," "..."] @punctuation.delimiter
240+((identifier) @type
180−["[" "]" "(" ")" "{" "}"] @punctuation.bracket
241+ (match? @type "([A-Z][a-z0-9]+)+$"))
182−["="] @operator
243+((identifier) @constant
244+ (match? @constant "^[A-Z][A-Z0-9_]+$"))
184(identifier) @variable
246(identifier) @variable
185−;; In case you want type highlighting based on Julia naming conventions (this might collide with mathematical notation)
186−;((identifier) @type ; exception: mark `A_foo` sort of identifiers as variables
187− ;(match? @type "^[A-Z][^_]"))
188−((identifier) @constant
189− (match? @constant "^[A-Z][A-Z_]{2}[A-Z_]*$"))