208 lines
5.1 KiB
Scheme
208 lines
5.1 KiB
Scheme
;; #FFFFFF #000000 0 0 0 1
|
|
(variable) @variable
|
|
|
|
;; Lambdas / patterns keep params white
|
|
;; #FFFFFF #000000 0 1 0 5
|
|
(expression/lambda
|
|
(_)+ @variable.parameter
|
|
"->")
|
|
;; #FFFFFF #000000 0 0 0 1
|
|
(decl/function
|
|
patterns: (patterns
|
|
(_) @variable.parameter))
|
|
;; #FFFFFF #000000 0 0 0 1
|
|
(decl/function
|
|
(infix
|
|
(pattern) @variable.parameter))
|
|
|
|
;; Types / builtins
|
|
;; #F07178 #000000 0 0 0 6
|
|
((name) @type.builtin
|
|
(#match? @type.builtin "^(Int|Integer|Bool|Char|String|Float|Double|Word)$"))
|
|
|
|
;; Strings / chars
|
|
;; #9ADE7A #000000 0 0 0 1
|
|
(char) @literal.char
|
|
;; #9ADE7A #000000 0 0 0 1
|
|
(string) @literal.string
|
|
|
|
;; Comments
|
|
;; #99ADBF #000000 0 1 0 5
|
|
(comment) @comment.general
|
|
;; #99ADBF #000000 0 1 0 5
|
|
(haddock) @comment.documentation
|
|
;; #99ADBF #000000 0 1 0 1
|
|
(comment) @spell
|
|
|
|
;; Punctuation
|
|
;; #BFBDB6 #000000 0 0 0 1
|
|
[
|
|
"(" ")" "{" "}" "[" "]"
|
|
] @punctuation.bracket
|
|
;; #BFBDB6 #000000 0 0 0 1
|
|
[ "," ";" ] @punctuation.delimiter
|
|
|
|
;; Keywords (orange)
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
[ "forall" ] @keyword.quantifier
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
(pragma) @keyword.directive
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
[
|
|
"if" "then" "else" "case" "of"
|
|
] @keyword.conditional
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
[ "import" "qualified" "module" ] @keyword.import
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
[
|
|
"where" "let" "in" "class" "instance" "pattern" "data"
|
|
"newtype" "family" "type" "as" "hiding" "deriving" "via"
|
|
"stock" "anyclass" "do" "mdo" "rec" "infix" "infixl" "infixr"
|
|
] @keyword.definition
|
|
;; #FF8F40 #000000 0 0 0 1
|
|
[ "forall" ] @keyword.repeat
|
|
|
|
;; Operators (italic white, high priority)
|
|
;; #FFFFFF #000000 0 1 0 6
|
|
[
|
|
(operator)
|
|
(constructor_operator)
|
|
(all_names)
|
|
"." ".." "=" "|" "::" "=>" "->" "<-" "\\" "`" "@"
|
|
] @operator.general
|
|
;; #FFFFFF #000000 0 1 0 6
|
|
(infix_id
|
|
[
|
|
(variable) @operator.infix
|
|
(qualified (variable) @operator.infix)
|
|
])
|
|
;; #FFFFFF #000000 0 1 0 6
|
|
[
|
|
(operator)
|
|
(constructor_operator)
|
|
(all_names)
|
|
(wildcard)
|
|
"." ".." "=" "|" "::" "=>" "->" "<-" "\\" "`" "@"
|
|
] @operator
|
|
|
|
;; Modules
|
|
;; #7dcfff #000000 0 0 0 1
|
|
(module
|
|
(module_id) @module.name)
|
|
;; #7dcfff #000000 0 0 0 1
|
|
(module
|
|
(module_id) @module)
|
|
|
|
;; Functions / calls (leave blue for function identifiers, but vars stay white due to higher priority var rules)
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(decl/signature
|
|
[
|
|
name: (variable) @function.name
|
|
names: (binding_list (variable) @function.name)
|
|
])
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(decl/function
|
|
[
|
|
name: (variable) @function.name
|
|
names: (binding_list (variable) @function.name)
|
|
])
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(decl/bind
|
|
[
|
|
name: (variable) @function.name
|
|
names: (binding_list (variable) @function.name)
|
|
])
|
|
;; #82AAFF #000000 0 0 0 2
|
|
(decl
|
|
[
|
|
name: (variable) @function
|
|
names: (binding_list (variable) @function)
|
|
])
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(decl/signature
|
|
name: (variable) @function.io
|
|
type: (type/apply
|
|
constructor: (name) @_io)
|
|
(#match? @_io "^IO$"))
|
|
|
|
;; Function calls kept white via var priority; ensure explicit call rule stays neutral/white
|
|
;; #FFFFFF #000000 0 0 0 3
|
|
(apply
|
|
[
|
|
(expression/variable) @function.call
|
|
(expression/qualified (variable) @function.call)
|
|
])
|
|
|
|
;; Types / constructors
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(name) @type
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(type/star) @type
|
|
;; #C6B5FF #000000 0 0 0 1
|
|
(constructor) @constructor.general
|
|
;; #9ADE7A #000000 0 0 0 2
|
|
((constructor) @boolean
|
|
(#match? @boolean "^(True|False)$"))
|
|
;; #9ADE7A #000000 0 0 0 1
|
|
((variable) @boolean
|
|
(#match? @boolean "^otherwise$"))
|
|
|
|
;; Quoters / quasiquotes
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(quoter) @function.call
|
|
;; #9ADE7A #000000 0 0 0 1
|
|
(quasiquote
|
|
[
|
|
(quoter) @_name
|
|
(_
|
|
(variable) @_name)
|
|
]
|
|
(#match? @_name "^qq$")
|
|
(quasiquote_body) @string)
|
|
;; #9ADE7A #000000 0 0 0 1
|
|
(quasiquote
|
|
(_
|
|
(variable) @_name)
|
|
(#match? @_name "^qq$")
|
|
(quasiquote_body) @string)
|
|
;; #82AAFF #000000 0 0 0 3
|
|
(quasiquote
|
|
(_
|
|
(module) @module
|
|
.
|
|
(variable) @function.call))
|
|
|
|
;; Exceptions / Debug
|
|
;; #F07178 #000000 0 0 0 1
|
|
((variable) @keyword.exception
|
|
(#match? @keyword.exception "^(error|undefined|try|tryJust|tryAny|catch|catches|catchJust|handle|handleJust|throw|throwIO|throwTo|throwError|ioError|mask|mask_|uninterruptibleMask|uninterruptibleMask_|bracket|bracket_|bracketOnErrorSource|finally|fail|onException|expectationFailure)$"))
|
|
;; #F07178 #000000 0 0 0 1
|
|
((variable) @keyword.debug
|
|
(#match? @keyword.debug "^(trace|traceId|traceShow|traceShowId|traceWith|traceShowWith|traceStack|traceIO|traceM|traceShowM|traceEvent|traceEventWith|traceEventIO|flushEventLog|traceMarker|traceMarkerIO)$"))
|
|
|
|
;; Misc remaining structural
|
|
;; #C6B5FF #000000 0 0 0 1
|
|
(wildcard) @literal.special
|
|
;; #BFBDB6 #000000 0 0 0 1
|
|
[ "," ";" ] @punctuation.delimiter
|
|
;; #BFBDB6 #000000 0 0 0 1
|
|
[
|
|
"(" ")" "{" "}" "[" "]"
|
|
] @punctuation.bracket
|
|
;; #7dcfff #000000 0 0 0 1
|
|
(type/unit) @type.unit
|
|
(type/list) @type.list
|
|
(type/star) @type.star
|
|
;; #FFFFFF #000000 0 0 0 1
|
|
(field_name (variable) @variable.member)
|
|
(import_name (name) . (children (variable) @variable.member))
|
|
|
|
;; Numbers (bright yellow-green)
|
|
;; #DFFFA0 #000000 0 0 0 2
|
|
(integer) @number.integer
|
|
;; #DFFFA0 #000000 0 0 0 2
|
|
(negation) @number.integer
|
|
;; #DFFFA0 #000000 0 0 0 2
|
|
(expression/literal
|
|
(float) @number.float)
|