feat(languages): pkl (#9515)

* feat(languages): pkl

Add [pkl](https://github.com/apple/pkl) language.
Official documentation: https://pkl-lang.org/

* remove branch indent
pull/9582/head
Matouš Dzivjak 9 months ago committed by GitHub
parent f8e2d822ba
commit d137a08231
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -123,6 +123,7 @@
| pem | ✓ | | | |
| perl | ✓ | ✓ | ✓ | `perlnavigator` |
| php | ✓ | ✓ | ✓ | `intelephense` |
| pkl | ✓ | | ✓ | |
| po | ✓ | ✓ | | |
| pod | ✓ | | | |
| ponylang | ✓ | ✓ | ✓ | |

@ -3061,3 +3061,14 @@ indent = { tab-width = 4, unit = " " }
name = "tact"
source = { git = "https://github.com/tact-lang/tree-sitter-tact", rev = "ec57ab29c86d632639726631fb2bb178d23e1c91" }
[[language]]
name = "pkl"
scope = "source.pkl"
injection-regex = "pkl"
file-types = ["pkl", "pcf"]
comment-token = "//"
indent = { tab-width = 2, unit = " " }
[[grammar]]
name = "pkl"
source = { git = "https://github.com/apple/tree-sitter-pkl", rev = "c03f04a313b712f8ab00a2d862c10b37318699ae" }

@ -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…
Cancel
Save