forked from Mirrors/helix
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
3.0 KiB
Scheme
177 lines
3.0 KiB
Scheme
[
|
|
(line_comment)
|
|
(block_comment)
|
|
] @comment
|
|
|
|
(bool) @constant.builtin.boolean
|
|
(integer) @constant.numeric.integer
|
|
(float) @constant.numeric.float
|
|
(character) @constant.character
|
|
|
|
;; strings and docstring
|
|
(source_file docstring: (string) @string.special)
|
|
(entity docstring: (string) @string.special)
|
|
(method docstring: (string) @string.special) ; docstring for methods without body
|
|
(behavior docstring: (string) @string.special) ; docstring for methods without body
|
|
(constructor docstring: (string) @string.special) ; docstring for methods without body
|
|
(method body: (block . (string) @string.special)) ; docstring for methods with body
|
|
(behavior body: (block . (string) @string.special))
|
|
(constructor body: (block . (string) @string.special))
|
|
(field docstring: (string) @string.special)
|
|
(string) @string
|
|
|
|
;; Punctuation
|
|
[
|
|
"("
|
|
")"
|
|
"{"
|
|
"}"
|
|
"["
|
|
"]"
|
|
] @punctuation.bracket
|
|
[
|
|
";"
|
|
"."
|
|
","
|
|
] @punctuation.delimiter
|
|
|
|
(this) @variable.builtin
|
|
|
|
(field name: (identifier) @variable.other.member)
|
|
|
|
"use" @keyword.control.import
|
|
[
|
|
"for"
|
|
"in"
|
|
"while"
|
|
"do"
|
|
"repeat"
|
|
"until"
|
|
] @keyword.control.repeat
|
|
[
|
|
"if"
|
|
"ifdef"
|
|
"iftype"
|
|
"then"
|
|
"elseif"
|
|
"else"
|
|
"match"
|
|
] @keyword.control.conditional
|
|
[
|
|
"break"
|
|
"continue"
|
|
"return"
|
|
"error"
|
|
"compile_error"
|
|
"compile_intrinsic"
|
|
] @keyword.control.return
|
|
[
|
|
"recover"
|
|
"consume"
|
|
"end"
|
|
"try"
|
|
"with"
|
|
] @keyword.control
|
|
|
|
[
|
|
"as"
|
|
"is"
|
|
"isnt"
|
|
"not"
|
|
"and"
|
|
"or"
|
|
"xor"
|
|
"digestof"
|
|
"addressof"
|
|
(location)
|
|
] @keyword.operator
|
|
|
|
(entity_type) @keyword.storage.type
|
|
|
|
[
|
|
"var"
|
|
"let"
|
|
"embed"
|
|
] @keyword.storage
|
|
|
|
[
|
|
"fun"
|
|
"be"
|
|
"new"
|
|
] @keyword.function
|
|
|
|
[
|
|
(cap)
|
|
(gencap)
|
|
"where"
|
|
] @keyword
|
|
|
|
[
|
|
(partial)
|
|
"=>"
|
|
"~"
|
|
".>"
|
|
"+"
|
|
"-"
|
|
"*"
|
|
"/"
|
|
"%"
|
|
"%%"
|
|
"+~"
|
|
"-~"
|
|
"/~"
|
|
"*~"
|
|
"%~"
|
|
"%%~"
|
|
|
|
">>"
|
|
"<<"
|
|
">>~"
|
|
"<<~"
|
|
|
|
"=="
|
|
"!="
|
|
">"
|
|
"<"
|
|
">="
|
|
"<="
|
|
] @operator
|
|
|
|
;; Types
|
|
(entity name: (identifier) @type)
|
|
(nominal_type name: (identifier) @type)
|
|
(typeparams (typeparam name: (identifier) @type))
|
|
|
|
;; constructors / methods / behaviors
|
|
(constructor name: (identifier) @constructor)
|
|
(method name: (identifier) @function.method)
|
|
(behavior name: (identifier) @function.method)
|
|
|
|
;; method calls
|
|
; TODO: be more specific about what is the actual function reference
|
|
(call callee: (field_access field: (identifier) @function.method))
|
|
(call callee: (_) @function.method)
|
|
(ffi_call name: (_) @function)
|
|
(partial_application function: (identifier) @function.method)
|
|
(chain function: (identifier) @function.method)
|
|
|
|
;; fields and params
|
|
(field name: (identifier) @variable.other.member)
|
|
(param (identifier) @variable.parameter)
|
|
(lambdaparam (identifier) @variable.parameter)
|
|
|
|
;; this.field is considered a member access
|
|
(field_access base: (this) field: (identifier) @variable.other.member)
|
|
|
|
;; annotations
|
|
(annotations (identifier) @attribute)
|
|
|
|
;; variables
|
|
;; references to upper case things are considered constructors
|
|
(
|
|
(identifier) @constructor
|
|
(#match @constructor "^[A-Z]")
|
|
)
|
|
(identifier) @variable
|
|
|