110 lines
2 KiB
Scheme
110 lines
2 KiB
Scheme
;; Literals
|
|
(integer_literal) @constant.numeric.integer
|
|
(natural_literal) @constant.numeric.integer
|
|
(double_literal) @constant.numeric.float
|
|
(boolean_literal) @constant.builtin.boolean
|
|
(builtin "None") @constant.builtin
|
|
|
|
;; Text
|
|
(text_literal) @string
|
|
(interpolation "}" @string)
|
|
(double_quote_escaped) @constant.character.escape
|
|
(single_quote_escaped) @constant.character.escape
|
|
|
|
;; Imports
|
|
(local_import) @string.special.path
|
|
(http_import) @string.special.url
|
|
(env_import) @keyword
|
|
(env_variable) @string.special
|
|
(import_hash) @string.special
|
|
(missing_import) @keyword.control.import
|
|
[ (import_as_location) (import_as_text) ] @type
|
|
|
|
;; Comments
|
|
(block_comment) @comment.block
|
|
(line_comment) @comment.line
|
|
|
|
;; Types
|
|
([
|
|
(let_binding (label) @type)
|
|
(union_type_entry (label) @type)
|
|
] (#match? @type "^[A-Z]"))
|
|
((primitive_expression
|
|
(identifier (label) @type)
|
|
(selector (label) @type)?) @whole_identifier
|
|
(#match? @whole_identifier "(?:^|\\.)[A-Z][^.]*$"))
|
|
|
|
;; Variables
|
|
(identifier [
|
|
(label) @variable
|
|
(de_bruijn_index) @operator
|
|
])
|
|
(let_binding label: (label) @variable)
|
|
(lambda_expression label: (label) @variable.parameter)
|
|
(record_literal_entry (label) @variable.other.member)
|
|
(record_type_entry (label) @variable.other.member)
|
|
(selector) @variable.other.member
|
|
|
|
;; Keywords
|
|
[
|
|
"let"
|
|
"in"
|
|
"assert"
|
|
] @keyword
|
|
[
|
|
"using"
|
|
"as"
|
|
"with"
|
|
] @keyword.operator
|
|
|
|
;; Operators
|
|
[
|
|
(type_operator)
|
|
(assign_operator)
|
|
(lambda_operator)
|
|
(arrow_operator)
|
|
(infix_operator)
|
|
(completion_operator)
|
|
(assert_operator)
|
|
(forall_operator)
|
|
(empty_record_literal)
|
|
] @operator
|
|
|
|
;; Builtins
|
|
(builtin_function) @function.builtin
|
|
(builtin [
|
|
"Bool"
|
|
"Optional"
|
|
"Natural"
|
|
"Integer"
|
|
"Double"
|
|
"Text"
|
|
"Date"
|
|
"Time"
|
|
"TimeZone"
|
|
"List"
|
|
"Type"
|
|
"Kind"
|
|
"Sort"
|
|
] @type.builtin)
|
|
|
|
;; Punctuation
|
|
[ "," "|" ] @punctuation.delimiter
|
|
(selector_dot) @punctuation.delimiter
|
|
[
|
|
"("
|
|
")"
|
|
"{"
|
|
"}"
|
|
"["
|
|
"]"
|
|
"<"
|
|
">"
|
|
] @punctuation.bracket
|
|
|
|
;; Conditionals
|
|
[
|
|
"if"
|
|
"then"
|
|
"else"
|
|
] @keyword.control.conditional
|