180 lines
3.1 KiB
Scheme
180 lines
3.1 KiB
Scheme
|
; Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
||
|
;
|
||
|
; Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
; you may not use this file except in compliance with the License.
|
||
|
; You may obtain a copy of the License at
|
||
|
;
|
||
|
; https://www.apache.org/licenses/LICENSE-2.0
|
||
|
;
|
||
|
; Unless required by applicable law or agreed to in writing, software
|
||
|
; distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
; See the License for the specific language governing permissions and
|
||
|
; limitations under the License.
|
||
|
|
||
|
; this definition is imprecise in that
|
||
|
; * any qualified or unqualified call to a method named "Regex" is considered a regex
|
||
|
; * string delimiters are considered part of the regex
|
||
|
|
||
|
; Operators
|
||
|
|
||
|
[
|
||
|
"??"
|
||
|
"@"
|
||
|
"="
|
||
|
"<"
|
||
|
">"
|
||
|
"!"
|
||
|
"=="
|
||
|
"!="
|
||
|
"<="
|
||
|
">="
|
||
|
"&&"
|
||
|
"||"
|
||
|
"+"
|
||
|
"-"
|
||
|
"**"
|
||
|
"*"
|
||
|
"/"
|
||
|
"~/"
|
||
|
"%"
|
||
|
"|>"
|
||
|
] @keyword.operator
|
||
|
|
||
|
[
|
||
|
"?"
|
||
|
"|"
|
||
|
"->"
|
||
|
] @operator.type
|
||
|
|
||
|
[
|
||
|
","
|
||
|
":"
|
||
|
"."
|
||
|
"?."
|
||
|
] @punctuation.delimiter
|
||
|
|
||
|
[
|
||
|
"("
|
||
|
")"
|
||
|
"]"
|
||
|
"{"
|
||
|
"}"
|
||
|
; "[" @punctuation.bracket TODO: FIGURE OUT HOW TO REFER TO CUSTOM TOKENS
|
||
|
] @punctuation.bracket
|
||
|
|
||
|
; Keywords
|
||
|
|
||
|
[
|
||
|
"abstract"
|
||
|
"amends"
|
||
|
"as"
|
||
|
"class"
|
||
|
"extends"
|
||
|
"external"
|
||
|
"function"
|
||
|
"hidden"
|
||
|
"import"
|
||
|
"import*"
|
||
|
"in"
|
||
|
"let"
|
||
|
"local"
|
||
|
"module"
|
||
|
"new"
|
||
|
"open"
|
||
|
"out"
|
||
|
"typealias"
|
||
|
"when"
|
||
|
] @keyword
|
||
|
|
||
|
[
|
||
|
"if"
|
||
|
"is"
|
||
|
"else"
|
||
|
] @keyword.control.conditional
|
||
|
|
||
|
[
|
||
|
"for"
|
||
|
] @keyword.control.repeat
|
||
|
|
||
|
(importExpr "import" @keyword.control.import)
|
||
|
(importGlobExpr "import*" @keyword.control.import)
|
||
|
|
||
|
"read" @function.builtin
|
||
|
"read?" @function.builtin
|
||
|
"read*" @function.builtin
|
||
|
"throw" @function.builtin
|
||
|
"trace" @function.builtin
|
||
|
|
||
|
(moduleExpr "module" @type.builtin)
|
||
|
"nothing" @type.builtin
|
||
|
"unknown" @type.builtin
|
||
|
|
||
|
(outerExpr) @variable.builtin
|
||
|
"super" @variable.builtin
|
||
|
(thisExpr) @variable.builtin
|
||
|
|
||
|
[
|
||
|
(falseLiteral)
|
||
|
(nullLiteral)
|
||
|
(trueLiteral)
|
||
|
] @constant.builtin
|
||
|
|
||
|
; Literals
|
||
|
|
||
|
(stringConstant) @string
|
||
|
(slStringLiteral) @string
|
||
|
(mlStringLiteral) @string
|
||
|
|
||
|
(escapeSequence) @constent.character.escape
|
||
|
|
||
|
(intLiteral) @constant.numeric.integer
|
||
|
(floatLiteral) @constant.numeric.float
|
||
|
|
||
|
(interpolationExpr
|
||
|
"\\(" @punctuation.special
|
||
|
")" @punctuation.special) @embedded
|
||
|
|
||
|
(interpolationExpr
|
||
|
"\\#(" @punctuation.special
|
||
|
")" @punctuation.special) @embedded
|
||
|
|
||
|
(interpolationExpr
|
||
|
"\\##(" @punctuation.special
|
||
|
")" @punctuation.special) @embedded
|
||
|
|
||
|
(lineComment) @comment
|
||
|
(blockComment) @comment
|
||
|
(docComment) @comment
|
||
|
|
||
|
; Identifiers
|
||
|
|
||
|
(classProperty (identifier) @variable.other.member)
|
||
|
(objectProperty (identifier) @variable.other.member)
|
||
|
|
||
|
(parameterList (typedIdentifier (identifier) @variable.parameter))
|
||
|
(objectBodyParameters (typedIdentifier (identifier) @variable.parameter))
|
||
|
|
||
|
(identifier) @variable
|
||
|
|
||
|
; Method definitions
|
||
|
|
||
|
(classMethod (methodHeader (identifier)) @function.method)
|
||
|
(objectMethod (methodHeader (identifier)) @function.method)
|
||
|
|
||
|
; Method calls
|
||
|
|
||
|
(methodCallExpr
|
||
|
(identifier) @function.method)
|
||
|
|
||
|
; Types
|
||
|
|
||
|
(clazz (identifier) @type)
|
||
|
(typeAlias (identifier) @type)
|
||
|
((identifier) @type
|
||
|
(#match? @type "^[A-Z]"))
|
||
|
|
||
|
(typeArgumentList
|
||
|
"<" @punctuation.bracket
|
||
|
">" @punctuation.bracket)
|