mirror of https://github.com/helix-editor/helix
feat(languages): pkl (#9515)
* feat(languages): pkl Add [pkl](https://github.com/apple/pkl) language. Official documentation: https://pkl-lang.org/ * remove branch indentpull/9582/head
parent
f8e2d822ba
commit
d137a08231
@ -0,0 +1,179 @@
|
||||
; 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)
|
@ -0,0 +1,23 @@
|
||||
; 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
|
||||
[
|
||||
(objectBody)
|
||||
(classBody)
|
||||
(ifExpr)
|
||||
(mlStringLiteral) ; This isn't perfect; newlines are too indented but it's better than if omitted.
|
||||
] @indent
|
@ -0,0 +1,30 @@
|
||||
; 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
|
||||
(
|
||||
((methodCallExpr (identifier) @methodName (argumentList (slStringLiteral) @injection.content))
|
||||
(#set! injection.language "regex"))
|
||||
(eq? @methodName "Regex"))
|
||||
|
||||
((lineComment) @injection.content
|
||||
(#set! injection.language "comment"))
|
||||
|
||||
((blockComment) @injection.content
|
||||
(#set! injection.language "comment"))
|
||||
|
||||
((docComment) @injection.content
|
||||
(#set! injection.language "markdown"))
|
Loading…
Reference in New Issue