From d137a08231515b0a1694a3841081331e529ce953 Mon Sep 17 00:00:00 2001 From: Matouš Dzivjak Date: Fri, 9 Feb 2024 10:44:46 +0000 Subject: feat(languages): pkl (#9515) * feat(languages): pkl Add [pkl](https://github.com/apple/pkl) language. Official documentation: https://pkl-lang.org/ * remove branch indent--- runtime/queries/pkl/highlights.scm | 179 +++++++++++++++++++++++++++++++++++++ runtime/queries/pkl/indents.scm | 23 +++++ runtime/queries/pkl/injections.scm | 30 +++++++ 3 files changed, 232 insertions(+) create mode 100644 runtime/queries/pkl/highlights.scm create mode 100644 runtime/queries/pkl/indents.scm create mode 100644 runtime/queries/pkl/injections.scm (limited to 'runtime/queries/pkl') diff --git a/runtime/queries/pkl/highlights.scm b/runtime/queries/pkl/highlights.scm new file mode 100644 index 00000000..501c9485 --- /dev/null +++ b/runtime/queries/pkl/highlights.scm @@ -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) diff --git a/runtime/queries/pkl/indents.scm b/runtime/queries/pkl/indents.scm new file mode 100644 index 00000000..d2a9be1a --- /dev/null +++ b/runtime/queries/pkl/indents.scm @@ -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 diff --git a/runtime/queries/pkl/injections.scm b/runtime/queries/pkl/injections.scm new file mode 100644 index 00000000..15867f35 --- /dev/null +++ b/runtime/queries/pkl/injections.scm @@ -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")) -- cgit v1.2.3-70-g09d2