@ -6,9 +6,12 @@
; Types
;------
[ ( class_name ) ( class_type_name ) ( type_constructor ) ] @type
(
( type_constructor ) @type . builtin
( # match? @type . builtin "^(int|char|bytes|string|float|bool|unit|exn|array|list|option|int32|int64|nativeint|format6|lazy_t)$" )
)
( type_variable ) @type . parameter
[( class_name ) ( class_type_name ) ( type_constructor ) ] @type
[ ( constructor_name ) ( tag ) ] @constructor
@ -29,27 +32,34 @@
( method_name ) @function . method
; Variables
;----------
( value_pattern ) @variable . parameter
; Application
;------------
(
( value_name ) @function . builtin
( # match? @function . builtin "^(raise(_notrace)?|failwith|invalid_arg)$" )
)
( infix_expression
left: ( value_path ( value_name ) @function )
( infix_operator ) @operator
operator: ( concat _operator) @operator
( # eq? @operator "@@" ) )
( infix_expression
( infix _operator) @operator
operator: ( rel _operator) @operator
right: ( value_path ( value_name ) @function )
( # eq? @operator "|>" ) )
( application_expression
function: ( value_path ( value_name ) @function ) )
; Variables
;----------
[ ( value_name ) ( type_variable ) ] @variable
( value_pattern ) @variable . parameter
; Properties
;-----------
@ -58,55 +68,68 @@
; Constants
;----------
[ ( boolean ) ( unit ) ] @constant
[ ( number ) ( signed_number ) ] @constant . numeric . integer
( boolean ) @constant . builtin . boolean
(character ) @constant . character
[ ( number ) ( signed_number ) ] @constant . numeric
( string ) @string
[ ( string ) ( character ) ] @string
( quoted_string "{" @string "}" @string ) @string
( escape_sequence ) @constant . character . escape
( conversion_specification ) @string . special
; Operators
;----------
( match_expression ( match_operator ) @keyword )
( value_definition [ ( let_operator ) ( let_and_operator ) ] @keyword )
[
( conversion_specification )
( pretty_printing_indication )
] @punctuation . special
( prefix_operator )
( sign_operator )
( pow_operator )
( mult_operator )
( add_operator )
( concat_operator )
( rel_operator )
( and_operator )
( or_operator )
( assign_operator )
( hash_operator )
( indexing_operator )
( let_operator )
( let_and_operator )
( match_operator )
] @operator
[ "*" "#" "::" "<-" ] @operator
; Keywords
;---------
[
"and" "as" "assert" "begin" "class" "constraint"
"end" "external" "in"
"inherit" "initializer" "lazy" "let" "match" "method" "module"
"mutable" "new" "nonrec" "object" "of" "private" "rec" "sig" "struct"
"type" "val" "virtual" "when" "with"
"and" "as" "assert" "begin" "class" "constraint" "do" "done" "downto" "else"
"end" "ex ception" "ex ternal" "for" "fun" "function" "functor" "if " "in"
"in clude" "in herit" "initializer" "lazy" "let" "match" "method" "module"
"mutable" "new" "nonrec" "object" "of" " open" " private" "rec" "sig" "struct"
"t hen" "to" "try" "t ype" "val" "virtual" "when " "while " "with"
] @keyword
[ "fun" "function" "functor" ] @keyword . function
[ "if" "then" "else" ] @keyword . control . conditional
[ "exception" "try" ] @keyword . control . exception
[ "include" "open" ] @keyword . control . import
[ "for" "to" "downto" "while" "do" "done" ] @keyword . control . repeat
; Punctuation
;------------
; Macros
;-------
( attribute [ "[@" "]" ] @punctuation . special )
( item_attribute [ "[@@" "]" ] @punctuation . special )
( floating_attribute [ "[@@@" "]" ] @punctuation . special )
( extension [ "[%" "]" ] @punctuation . special )
( item_extension [ "[%%" "]" ] @punctuation . special )
( quoted_extension [ "{%" "}" ] @punctuation . special )
( quoted_item_extension [ "{%%" "}" ] @punctuation . special )
( attribute [ "[@" "]" ] @attribute )
( item_attribute [ "[@@" "]" ] @attribute )
( floating_attribute [ "[@@@" "]" ] @attribute )
( extension [ "[%" "]" ] @function . macro )
( item_extension [ "[%%" "]" ] @function . macro )
( quoted_extension [ "{%" "}" ] @function . macro )
( quoted_item_extension [ "{%%" "}" ] @function . macro )
"%" @function . macro
"%" @punctuation . special
[ "(" ")" "[" "]" "{" "}" "[|" "|]" "[<" "[>" ] @punctuation . bracket
@ -117,46 +140,12 @@
"->" ";;" ":>" "+=" ":=" ".."
] @punctuation . delimiter
; Operators
;----------
[
( prefix_operator )
( sign_operator )
( infix_operator )
( hash_operator )
( indexing_operator )
( let_operator )
( and_operator )
( match_operator )
] @operator
( match_expression ( match_operator ) @keyword )
( value_definition [ ( let_operator ) ( and_operator ) ] @keyword )
;; TODO: this is an error now
;(prefix_operator "!" @operator)
( infix_operator [ "&" "+" "-" "=" ">" "|" "%" ] @operator )
( signed_number [ "+" "-" ] @operator )
[ "*" "#" "::" "<-" ] @operator
; Attributes
;-----------
( attribute_id ) @ variable. other . member
( attribute_id ) @tag
; Comments
;---------
[ ( comment ) ( line_number_directive ) ( directive ) ( shebang ) ] @comment
( ERROR ) @error
; Blanket highlights
; ------------------
[ ( value_name ) ( type_variable ) ] @variable