From aad530b9a87880cbf1e1ab6961caf3f0af1bab8f Mon Sep 17 00:00:00 2001 From: Islon Scherer Date: Tue, 18 Mar 2025 20:23:53 +0100 Subject: [PATCH] move parser out of pkl-core (#1024) --- build.gradle.kts | 4 +- docs/docs.gradle.kts | 3 +- docs/src/test/kotlin/DocSnippetTests.kt | 8 +- pkl-core/gradle.lockfile | 6 - pkl-core/pkl-core.gradle.kts | 53 +----- .../main/java/org/pkl/core/PcfRenderer.java | 2 +- .../core/ast/builder/AbstractAstBuilder.java | 12 +- .../org/pkl/core/ast/builder/AstBuilder.java | 158 +++++++++--------- .../ast/builder/ImportsAndReadsParser.java | 22 +-- .../org/pkl/core/ast/builder/SymbolTable.java | 2 +- .../org/pkl/core/parser/package-info.java | 4 - .../pkl/core/parser/syntax/package-info.java | 4 - .../java/org/pkl/core/repl/ReplServer.java | 20 +-- .../core/runtime/MinPklVersionChecker.java | 8 +- .../java/org/pkl/core/runtime/VmLanguage.java | 6 +- .../runtime/VmUndefinedValueException.java | 2 +- .../java/org/pkl/core/runtime/VmUtils.java | 6 +- .../org/pkl/core/runtime/VmValueRenderer.java | 2 +- .../org/pkl/core/stdlib/base/PcfRenderer.java | 2 +- .../org/pkl/core/errorMessages.properties | 125 -------------- pkl-doc/pkl-doc.gradle.kts | 3 +- pkl-doc/src/main/kotlin/org/pkl/doc/Util.kt | 2 +- pkl-parser/gradle.lockfile | 51 ++++++ pkl-parser/pkl-parser.gradle.kts | 85 ++++++++++ .../org/pkl}/parser/BaseParserVisitor.java | 152 ++++++++--------- .../src/main/java/org/pkl}/parser/Lexer.java | 4 +- .../org/pkl}/parser/OperatorResolver.java | 18 +- .../src/main/java/org/pkl}/parser/Parser.java | 152 ++++++++--------- .../java/org/pkl}/parser/ParserError.java | 6 +- .../java/org/pkl}/parser/ParserVisitor.java | 118 ++++++------- .../src/main/java/org/pkl}/parser/Span.java | 2 +- .../src/main/java/org/pkl}/parser/Token.java | 2 +- .../java/org/pkl/parser/package-info.java | 4 + .../org/pkl}/parser/syntax/AbstractNode.java | 6 +- .../org/pkl}/parser/syntax/Annotation.java | 8 +- .../org/pkl}/parser/syntax/ArgumentList.java | 8 +- .../java/org/pkl}/parser/syntax/Class.java | 8 +- .../org/pkl}/parser/syntax/ClassBody.java | 8 +- .../org/pkl}/parser/syntax/ClassMethod.java | 8 +- .../org/pkl}/parser/syntax/ClassProperty.java | 8 +- .../org/pkl}/parser/syntax/DocComment.java | 8 +- .../java/org/pkl}/parser/syntax/Expr.java | 13 +- .../parser/syntax/ExtendsOrAmendsClause.java | 8 +- .../org/pkl}/parser/syntax/Identifier.java | 6 +- .../org/pkl}/parser/syntax/ImportClause.java | 8 +- .../java/org/pkl}/parser/syntax/Keyword.java | 6 +- .../java/org/pkl}/parser/syntax/Modifier.java | 6 +- .../java/org/pkl}/parser/syntax/Module.java | 12 +- .../org/pkl}/parser/syntax/ModuleDecl.java | 8 +- .../java/org/pkl}/parser/syntax/Node.java | 8 +- .../org/pkl}/parser/syntax/ObjectBody.java | 6 +- .../org/pkl}/parser/syntax/ObjectMember.java | 8 +- .../java/org/pkl}/parser/syntax/Operator.java | 2 +- .../org/pkl}/parser/syntax/Parameter.java | 8 +- .../org/pkl}/parser/syntax/ParameterList.java | 8 +- .../parser/syntax/QualifiedIdentifier.java | 4 +- .../org/pkl}/parser/syntax/ReplInput.java | 8 +- .../pkl}/parser/syntax/StringConstant.java | 8 +- .../org/pkl}/parser/syntax/StringPart.java | 8 +- .../java/org/pkl}/parser/syntax/Type.java | 8 +- .../org/pkl}/parser/syntax/TypeAlias.java | 8 +- .../pkl}/parser/syntax/TypeAnnotation.java | 8 +- .../pkl}/parser/syntax/TypeArgumentList.java | 6 +- .../org/pkl}/parser/syntax/TypeParameter.java | 8 +- .../pkl}/parser/syntax/TypeParameterList.java | 8 +- .../org/pkl/parser/syntax/package-info.java | 4 + .../org/pkl/parser/util/ErrorMessages.java | 36 ++++ .../org/pkl/parser/util/NonnullByDefault.java | 41 +++++ .../java/org/pkl/parser/util/Nullable.java | 38 +++++ .../org/pkl/parser/errorMessages.properties | 97 +++++++++++ .../src/test/antlr/PklLexer.g4 | 2 +- .../src/test/antlr/PklParser.g4 | 2 +- .../org/pkl}/parser/ANTLRSexpRenderer.kt | 6 +- .../test/kotlin/org/pkl}/parser/LexerTest.kt | 2 +- .../org/pkl}/parser/ParserComparisonTest.kt | 4 +- .../parser/ParserComparisonTestInterface.kt | 6 +- .../kotlin/org/pkl}/parser/SexpRenderer.kt | 22 +-- .../kotlin/org/pkl}/parser/SpanComparison.kt | 86 +++++----- .../test/kotlin/org/pkl}/parser/SpanTest.kt | 2 +- settings.gradle.kts | 2 + 80 files changed, 904 insertions(+), 737 deletions(-) delete mode 100644 pkl-core/src/main/java/org/pkl/core/parser/package-info.java delete mode 100644 pkl-core/src/main/java/org/pkl/core/parser/syntax/package-info.java create mode 100644 pkl-parser/gradle.lockfile create mode 100644 pkl-parser/pkl-parser.gradle.kts rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/BaseParserVisitor.java (68%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/Lexer.java (99%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/OperatorResolver.java (90%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/Parser.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/ParserError.java (91%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/ParserVisitor.java (60%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/Span.java (97%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/Token.java (99%) create mode 100644 pkl-parser/src/main/java/org/pkl/parser/package-info.java rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/AbstractNode.java (95%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Annotation.java (88%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ArgumentList.java (88%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Class.java (95%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ClassBody.java (91%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ClassMethod.java (94%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ClassProperty.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/DocComment.java (90%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Expr.java (98%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ExtendsOrAmendsClause.java (92%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Identifier.java (94%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ImportClause.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Keyword.java (88%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Modifier.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Module.java (90%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ModuleDecl.java (94%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Node.java (87%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ObjectBody.java (92%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ObjectMember.java (98%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Operator.java (95%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Parameter.java (91%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ParameterList.java (88%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/QualifiedIdentifier.java (94%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/ReplInput.java (87%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/StringConstant.java (91%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/StringPart.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/Type.java (97%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/TypeAlias.java (94%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/TypeAnnotation.java (87%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/TypeArgumentList.java (90%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/TypeParameter.java (93%) rename {pkl-core/src/main/java/org/pkl/core => pkl-parser/src/main/java/org/pkl}/parser/syntax/TypeParameterList.java (88%) create mode 100644 pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java create mode 100644 pkl-parser/src/main/java/org/pkl/parser/util/ErrorMessages.java create mode 100644 pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java create mode 100644 pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java create mode 100644 pkl-parser/src/main/resources/org/pkl/parser/errorMessages.properties rename {pkl-core => pkl-parser}/src/test/antlr/PklLexer.g4 (99%) rename {pkl-core => pkl-parser}/src/test/antlr/PklParser.g4 (99%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/ANTLRSexpRenderer.kt (99%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/LexerTest.kt (98%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/ParserComparisonTest.kt (96%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/ParserComparisonTestInterface.kt (96%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/SexpRenderer.kt (97%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/SpanComparison.kt (88%) rename {pkl-core/src/test/kotlin/org/pkl/core => pkl-parser/src/test/kotlin/org/pkl}/parser/SpanTest.kt (97%) diff --git a/build.gradle.kts b/build.gradle.kts index 586f41c9..e0b4475c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2025 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. @@ -49,7 +49,7 @@ idea { testRunner = PLATFORM } configure { - afterSync(provider { project(":pkl-core").tasks.named("makeIntelliJAntlrPluginHappy") }) + afterSync(provider { project(":pkl-parser").tasks.named("makeIntelliJAntlrPluginHappy") }) } } } diff --git a/docs/docs.gradle.kts b/docs/docs.gradle.kts index d73ab047..6dbf0e34 100644 --- a/docs/docs.gradle.kts +++ b/docs/docs.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2025 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. @@ -37,6 +37,7 @@ dependencies { testImplementation(projects.pklConfigJava) testImplementation(projects.pklConfigKotlin) testImplementation(projects.pklCommonsTest) + testImplementation(projects.pklParser) testImplementation(libs.junitEngine) testImplementation(libs.antlrRuntime) } diff --git a/docs/src/test/kotlin/DocSnippetTests.kt b/docs/src/test/kotlin/DocSnippetTests.kt index 7dc3f21c..b8e3f6a2 100644 --- a/docs/src/test/kotlin/DocSnippetTests.kt +++ b/docs/src/test/kotlin/DocSnippetTests.kt @@ -21,9 +21,9 @@ import org.pkl.core.repl.ReplResponse import org.pkl.core.repl.ReplServer import org.pkl.core.util.IoUtils import org.pkl.core.http.HttpClient -import org.pkl.core.parser.Parser -import org.pkl.core.parser.ParserError -import org.pkl.core.parser.syntax.ClassProperty +import org.pkl.parser.Parser +import org.pkl.parser.ParserError +import org.pkl.parser.syntax.ClassProperty import org.pkl.core.resource.ResourceReaders import java.nio.file.Files import kotlin.io.path.isDirectory @@ -302,7 +302,7 @@ class DocSnippetTestsEngine : HierarchicalTestEngine Parser().parseModule(code) "pkl-expr" -> Parser().parseExpressionInput(code) diff --git a/pkl-core/gradle.lockfile b/pkl-core/gradle.lockfile index 498bb3d9..5ed3963e 100644 --- a/pkl-core/gradle.lockfile +++ b/pkl-core/gradle.lockfile @@ -3,13 +3,7 @@ # This file is expected to be part of source control. com.google.code.findbugs:jsr305:3.0.2=compileClasspath,compileOnlyDependenciesMetadata com.palantir.javapoet:javapoet:0.6.0=generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath -com.tunnelvisionlabs:antlr4-annotations:4.9.0=antlr -com.tunnelvisionlabs:antlr4-runtime:4.9.0=antlr,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath -com.tunnelvisionlabs:antlr4:4.9.0=antlr net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath -org.abego.treelayout:org.abego.treelayout.core:1.0.1=antlr -org.antlr:ST4:4.3=antlr -org.antlr:antlr-runtime:3.5.2=antlr org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata,testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testRuntimeOnlyDependenciesMetadata org.assertj:assertj-core:3.27.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath org.graalvm.polyglot:polyglot:24.1.2=compileClasspath,generatorCompileClasspath,generatorImplementationDependenciesMetadata,generatorRuntimeClasspath,implementationDependenciesMetadata,runtimeClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath diff --git a/pkl-core/pkl-core.gradle.kts b/pkl-core/pkl-core.gradle.kts index a65b786b..12c49b02 100644 --- a/pkl-core/pkl-core.gradle.kts +++ b/pkl-core/pkl-core.gradle.kts @@ -21,42 +21,30 @@ plugins { pklJavaLibrary pklPublishLibrary pklNativeBuild - antlr idea } val generatorSourceSet = sourceSets.register("generator") -sourceSets { test { java { srcDir(file("testgenerated/antlr")) } } } - idea { module { - // mark src/test/antlr as source dir - // mark generated/antlr as generated source dir // mark generated/truffle as generated source dir sourceDirs = sourceDirs + files("generated/truffle") - generatedSourceDirs = generatedSourceDirs + files("testgenerated/antlr", "generated/truffle") - testSources.from(files("src/test/antlr", "testgenerated/antlr")) + generatedSourceDirs = generatedSourceDirs + files("generated/truffle") } } val javaExecutableConfiguration: Configuration = configurations.create("javaExecutable") -// workaround for https://github.com/gradle/gradle/issues/820 -configurations.api.get().let { apiConfig -> - apiConfig.setExtendsFrom(apiConfig.extendsFrom.filter { it.name != "antlr" }) -} - dependencies { annotationProcessor(libs.truffleDslProcessor) annotationProcessor(generatorSourceSet.get().runtimeClasspath) - antlr(libs.antlr) - compileOnly(libs.jsr305) // pkl-core implements pkl-executor's ExecutorSpi, but the SPI doesn't ship with pkl-core compileOnly(projects.pklExecutor) + implementation(projects.pklParser) implementation(libs.msgpack) implementation(libs.truffleApi) implementation(libs.graalSdk) @@ -65,7 +53,6 @@ dependencies { implementation(libs.snakeYaml) - testImplementation(libs.antlrRuntime) testImplementation(projects.pklCommonsTest) add("generatorImplementation", libs.javaPoet) @@ -93,35 +80,6 @@ publishing { } } -tasks.generateTestGrammarSource { - maxHeapSize = "64m" - - // generate only visitor - arguments = arguments + listOf("-visitor", "-no-listener") - - // Due to https://github.com/antlr/antlr4/issues/2260, - // we can't put .g4 files into src/test/antlr/org/pkl/core/parser/antlr. - // Instead, we put .g4 files into src/test/antlr, adapt output dir below, - // and use @header directives in .g4 files (instead of setting `-package` argument here) - // and task makeIntelliJAntlrPluginHappy to fix up the IDE story. - outputDirectory = file("testgenerated/antlr/org/pkl/core/parser/antlr") -} - -tasks.generateGrammarSource { enabled = false } - -tasks.named("generateGeneratorGrammarSource") { enabled = false } - -tasks.compileTestKotlin { dependsOn(tasks.generateTestGrammarSource) } - -// Satisfy expectations of IntelliJ ANTLR plugin, -// which can't otherwise cope with our ANTLR setup. -val makeIntelliJAntlrPluginHappy by - tasks.registering(Copy::class) { - dependsOn(tasks.generateGrammarSource) - into("test/antlr") - from("testgenerated/antlr/org/pkl/core/parser/antlr") { include("PklLexer.tokens") } - } - tasks.processResources { inputs.property("version", buildInfo.pklVersion) inputs.property("commitId", buildInfo.commitId) @@ -245,13 +203,6 @@ tasks.clean { delete(layout.buildDirectory.dir("test-packages")) } -spotless { - antlr4 { - licenseHeaderFile(rootProject.file("buildSrc/src/main/resources/license-header.star-block.txt")) - target(files("src/test/antlr/PklParser.g4", "src/test/antlr/PklLexer.g4")) - } -} - private fun Test.configureTest() { inputs .dir("src/test/files/LanguageSnippetTests/input") diff --git a/pkl-core/src/main/java/org/pkl/core/PcfRenderer.java b/pkl-core/src/main/java/org/pkl/core/PcfRenderer.java index edbbbd7e..a1b22893 100644 --- a/pkl-core/src/main/java/org/pkl/core/PcfRenderer.java +++ b/pkl-core/src/main/java/org/pkl/core/PcfRenderer.java @@ -19,7 +19,7 @@ import java.io.IOException; import java.io.Writer; import java.util.*; import java.util.regex.Pattern; -import org.pkl.core.parser.Lexer; +import org.pkl.parser.Lexer; // To instantiate this class, use ValueRenderers.pcf(). final class PcfRenderer implements ValueRenderer { diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/AbstractAstBuilder.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/AbstractAstBuilder.java index 3dc1969e..b53a4d89 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/AbstractAstBuilder.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/AbstractAstBuilder.java @@ -18,14 +18,14 @@ package org.pkl.core.ast.builder; import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.source.SourceSection; import java.util.List; -import org.pkl.core.parser.BaseParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.parser.syntax.DocComment; -import org.pkl.core.parser.syntax.Modifier; -import org.pkl.core.parser.syntax.Modifier.ModifierValue; -import org.pkl.core.parser.syntax.Node; import org.pkl.core.runtime.VmExceptionBuilder; import org.pkl.core.util.Nullable; +import org.pkl.parser.BaseParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.syntax.DocComment; +import org.pkl.parser.syntax.Modifier; +import org.pkl.parser.syntax.Modifier.ModifierValue; +import org.pkl.parser.syntax.Node; public abstract class AbstractAstBuilder extends BaseParserVisitor { diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java index 1cd42e2c..c196c099 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java @@ -157,81 +157,6 @@ import org.pkl.core.module.ModuleKey; import org.pkl.core.module.ModuleKeys; import org.pkl.core.module.ResolvedModuleKey; import org.pkl.core.packages.PackageLoadError; -import org.pkl.core.parser.Span; -import org.pkl.core.parser.syntax.Annotation; -import org.pkl.core.parser.syntax.ArgumentList; -import org.pkl.core.parser.syntax.Class; -import org.pkl.core.parser.syntax.ClassMethod; -import org.pkl.core.parser.syntax.ClassProperty; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.Expr.AmendsExpr; -import org.pkl.core.parser.syntax.Expr.BinaryOperatorExpr; -import org.pkl.core.parser.syntax.Expr.BoolLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FloatLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FunctionLiteralExpr; -import org.pkl.core.parser.syntax.Expr.IfExpr; -import org.pkl.core.parser.syntax.Expr.ImportExpr; -import org.pkl.core.parser.syntax.Expr.IntLiteralExpr; -import org.pkl.core.parser.syntax.Expr.LetExpr; -import org.pkl.core.parser.syntax.Expr.LogicalNotExpr; -import org.pkl.core.parser.syntax.Expr.ModuleExpr; -import org.pkl.core.parser.syntax.Expr.MultiLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.NewExpr; -import org.pkl.core.parser.syntax.Expr.NonNullExpr; -import org.pkl.core.parser.syntax.Expr.NullLiteralExpr; -import org.pkl.core.parser.syntax.Expr.OuterExpr; -import org.pkl.core.parser.syntax.Expr.ParenthesizedExpr; -import org.pkl.core.parser.syntax.Expr.QualifiedAccessExpr; -import org.pkl.core.parser.syntax.Expr.ReadExpr; -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.SubscriptExpr; -import org.pkl.core.parser.syntax.Expr.SuperAccessExpr; -import org.pkl.core.parser.syntax.Expr.SuperSubscriptExpr; -import org.pkl.core.parser.syntax.Expr.ThisExpr; -import org.pkl.core.parser.syntax.Expr.ThrowExpr; -import org.pkl.core.parser.syntax.Expr.TraceExpr; -import org.pkl.core.parser.syntax.Expr.TypeCastExpr; -import org.pkl.core.parser.syntax.Expr.TypeCheckExpr; -import org.pkl.core.parser.syntax.Expr.UnaryMinusExpr; -import org.pkl.core.parser.syntax.Expr.UnqualifiedAccessExpr; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause; -import org.pkl.core.parser.syntax.Identifier; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.Modifier; -import org.pkl.core.parser.syntax.Modifier.ModifierValue; -import org.pkl.core.parser.syntax.Module; -import org.pkl.core.parser.syntax.Node; -import org.pkl.core.parser.syntax.ObjectBody; -import org.pkl.core.parser.syntax.ObjectMember.ForGenerator; -import org.pkl.core.parser.syntax.ObjectMember.MemberPredicate; -import org.pkl.core.parser.syntax.ObjectMember.ObjectElement; -import org.pkl.core.parser.syntax.ObjectMember.ObjectEntry; -import org.pkl.core.parser.syntax.ObjectMember.ObjectMethod; -import org.pkl.core.parser.syntax.ObjectMember.ObjectProperty; -import org.pkl.core.parser.syntax.ObjectMember.ObjectSpread; -import org.pkl.core.parser.syntax.ObjectMember.WhenGenerator; -import org.pkl.core.parser.syntax.Parameter; -import org.pkl.core.parser.syntax.Parameter.TypedIdentifier; -import org.pkl.core.parser.syntax.ParameterList; -import org.pkl.core.parser.syntax.QualifiedIdentifier; -import org.pkl.core.parser.syntax.StringConstant; -import org.pkl.core.parser.syntax.StringPart; -import org.pkl.core.parser.syntax.StringPart.StringChars; -import org.pkl.core.parser.syntax.StringPart.StringInterpolation; -import org.pkl.core.parser.syntax.Type; -import org.pkl.core.parser.syntax.Type.ConstrainedType; -import org.pkl.core.parser.syntax.Type.DeclaredType; -import org.pkl.core.parser.syntax.Type.FunctionType; -import org.pkl.core.parser.syntax.Type.ModuleType; -import org.pkl.core.parser.syntax.Type.NothingType; -import org.pkl.core.parser.syntax.Type.NullableType; -import org.pkl.core.parser.syntax.Type.ParenthesizedType; -import org.pkl.core.parser.syntax.Type.StringConstantType; -import org.pkl.core.parser.syntax.Type.UnionType; -import org.pkl.core.parser.syntax.Type.UnknownType; -import org.pkl.core.parser.syntax.TypeAlias; -import org.pkl.core.parser.syntax.TypeAnnotation; -import org.pkl.core.parser.syntax.TypeParameterList; import org.pkl.core.runtime.BaseModule; import org.pkl.core.runtime.ModuleInfo; import org.pkl.core.runtime.ModuleResolver; @@ -256,6 +181,81 @@ import org.pkl.core.util.EconomicMaps; import org.pkl.core.util.IoUtils; import org.pkl.core.util.Nullable; import org.pkl.core.util.Pair; +import org.pkl.parser.Span; +import org.pkl.parser.syntax.Annotation; +import org.pkl.parser.syntax.ArgumentList; +import org.pkl.parser.syntax.Class; +import org.pkl.parser.syntax.ClassMethod; +import org.pkl.parser.syntax.ClassProperty; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.Expr.AmendsExpr; +import org.pkl.parser.syntax.Expr.BinaryOperatorExpr; +import org.pkl.parser.syntax.Expr.BoolLiteralExpr; +import org.pkl.parser.syntax.Expr.FloatLiteralExpr; +import org.pkl.parser.syntax.Expr.FunctionLiteralExpr; +import org.pkl.parser.syntax.Expr.IfExpr; +import org.pkl.parser.syntax.Expr.ImportExpr; +import org.pkl.parser.syntax.Expr.IntLiteralExpr; +import org.pkl.parser.syntax.Expr.LetExpr; +import org.pkl.parser.syntax.Expr.LogicalNotExpr; +import org.pkl.parser.syntax.Expr.ModuleExpr; +import org.pkl.parser.syntax.Expr.MultiLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.NewExpr; +import org.pkl.parser.syntax.Expr.NonNullExpr; +import org.pkl.parser.syntax.Expr.NullLiteralExpr; +import org.pkl.parser.syntax.Expr.OuterExpr; +import org.pkl.parser.syntax.Expr.ParenthesizedExpr; +import org.pkl.parser.syntax.Expr.QualifiedAccessExpr; +import org.pkl.parser.syntax.Expr.ReadExpr; +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.SubscriptExpr; +import org.pkl.parser.syntax.Expr.SuperAccessExpr; +import org.pkl.parser.syntax.Expr.SuperSubscriptExpr; +import org.pkl.parser.syntax.Expr.ThisExpr; +import org.pkl.parser.syntax.Expr.ThrowExpr; +import org.pkl.parser.syntax.Expr.TraceExpr; +import org.pkl.parser.syntax.Expr.TypeCastExpr; +import org.pkl.parser.syntax.Expr.TypeCheckExpr; +import org.pkl.parser.syntax.Expr.UnaryMinusExpr; +import org.pkl.parser.syntax.Expr.UnqualifiedAccessExpr; +import org.pkl.parser.syntax.ExtendsOrAmendsClause; +import org.pkl.parser.syntax.Identifier; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.Modifier; +import org.pkl.parser.syntax.Modifier.ModifierValue; +import org.pkl.parser.syntax.Module; +import org.pkl.parser.syntax.Node; +import org.pkl.parser.syntax.ObjectBody; +import org.pkl.parser.syntax.ObjectMember.ForGenerator; +import org.pkl.parser.syntax.ObjectMember.MemberPredicate; +import org.pkl.parser.syntax.ObjectMember.ObjectElement; +import org.pkl.parser.syntax.ObjectMember.ObjectEntry; +import org.pkl.parser.syntax.ObjectMember.ObjectMethod; +import org.pkl.parser.syntax.ObjectMember.ObjectProperty; +import org.pkl.parser.syntax.ObjectMember.ObjectSpread; +import org.pkl.parser.syntax.ObjectMember.WhenGenerator; +import org.pkl.parser.syntax.Parameter; +import org.pkl.parser.syntax.Parameter.TypedIdentifier; +import org.pkl.parser.syntax.ParameterList; +import org.pkl.parser.syntax.QualifiedIdentifier; +import org.pkl.parser.syntax.StringConstant; +import org.pkl.parser.syntax.StringPart; +import org.pkl.parser.syntax.StringPart.StringChars; +import org.pkl.parser.syntax.StringPart.StringInterpolation; +import org.pkl.parser.syntax.Type; +import org.pkl.parser.syntax.Type.ConstrainedType; +import org.pkl.parser.syntax.Type.DeclaredType; +import org.pkl.parser.syntax.Type.FunctionType; +import org.pkl.parser.syntax.Type.ModuleType; +import org.pkl.parser.syntax.Type.NothingType; +import org.pkl.parser.syntax.Type.NullableType; +import org.pkl.parser.syntax.Type.ParenthesizedType; +import org.pkl.parser.syntax.Type.StringConstantType; +import org.pkl.parser.syntax.Type.UnionType; +import org.pkl.parser.syntax.Type.UnknownType; +import org.pkl.parser.syntax.TypeAlias; +import org.pkl.parser.syntax.TypeAnnotation; +import org.pkl.parser.syntax.TypeParameterList; public class AstBuilder extends AbstractAstBuilder { private final VmLanguage language; @@ -1097,7 +1097,7 @@ public class AstBuilder extends AbstractAstBuilder { return Pair.of(elementNodes, isConstantNodes); } - public GeneratorMemberNode visitObjectMember(org.pkl.core.parser.syntax.ObjectMember member) { + public GeneratorMemberNode visitObjectMember(org.pkl.parser.syntax.ObjectMember member) { return (GeneratorMemberNode) member.accept(this); } @@ -2375,7 +2375,7 @@ public class AstBuilder extends AbstractAstBuilder { } private GeneratorMemberNode[] doVisitGeneratorMemberNodes( - List members) { + List members) { var result = new GeneratorMemberNode[members.size()]; for (var i = 0; i < result.length; i++) { result[i] = visitObjectMember(members.get(i)); @@ -2666,7 +2666,7 @@ public class AstBuilder extends AbstractAstBuilder { } var forExprCtx = ctx.parent(); while (forExprCtx != null - && forExprCtx.getClass() != org.pkl.core.parser.syntax.ObjectMember.ForGenerator.class) { + && forExprCtx.getClass() != org.pkl.parser.syntax.ObjectMember.ForGenerator.class) { forExprCtx = forExprCtx.parent(); } assert forExprCtx != null; @@ -2674,7 +2674,7 @@ public class AstBuilder extends AbstractAstBuilder { .evalError(errorMessageKey) .withSourceSection( createSourceSection( - ((org.pkl.core.parser.syntax.ObjectMember.ForGenerator) forExprCtx).forSpan())) + ((org.pkl.parser.syntax.ObjectMember.ForGenerator) forExprCtx).forSpan())) .build(); } diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java index 8a752be5..b63c3386 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java @@ -24,21 +24,21 @@ import java.util.List; import org.pkl.core.ast.builder.ImportsAndReadsParser.Entry; import org.pkl.core.module.ModuleKey; import org.pkl.core.module.ResolvedModuleKey; -import org.pkl.core.parser.Parser; -import org.pkl.core.parser.ParserError; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.Expr.ImportExpr; -import org.pkl.core.parser.syntax.Expr.ReadExpr; -import org.pkl.core.parser.syntax.Expr.ReadType; -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause.Type; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.StringPart.StringChars; import org.pkl.core.runtime.VmExceptionBuilder; import org.pkl.core.runtime.VmUtils; import org.pkl.core.util.IoUtils; import org.pkl.core.util.Nullable; +import org.pkl.parser.Parser; +import org.pkl.parser.ParserError; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.Expr.ImportExpr; +import org.pkl.parser.syntax.Expr.ReadExpr; +import org.pkl.parser.syntax.Expr.ReadType; +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr; +import org.pkl.parser.syntax.ExtendsOrAmendsClause; +import org.pkl.parser.syntax.ExtendsOrAmendsClause.Type; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.StringPart.StringChars; /** * Collects module uris and resource uris imported within a module. diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java index 4f8c0d1c..20c856fd 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java @@ -24,12 +24,12 @@ import org.pkl.core.ast.ConstantNode; import org.pkl.core.ast.ExpressionNode; import org.pkl.core.ast.expression.generator.GeneratorMemberNode; import org.pkl.core.ast.member.ObjectMember; -import org.pkl.core.parser.Lexer; import org.pkl.core.runtime.Identifier; import org.pkl.core.runtime.ModuleInfo; import org.pkl.core.runtime.VmDataSize; import org.pkl.core.runtime.VmDuration; import org.pkl.core.util.Nullable; +import org.pkl.parser.Lexer; public final class SymbolTable { private Scope currentScope; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/package-info.java b/pkl-core/src/main/java/org/pkl/core/parser/package-info.java deleted file mode 100644 index e2521ac4..00000000 --- a/pkl-core/src/main/java/org/pkl/core/parser/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@NonnullByDefault -package org.pkl.core.parser; - -import org.pkl.core.util.NonnullByDefault; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/package-info.java b/pkl-core/src/main/java/org/pkl/core/parser/syntax/package-info.java deleted file mode 100644 index 1e91ee67..00000000 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/package-info.java +++ /dev/null @@ -1,4 +0,0 @@ -@NonnullByDefault -package org.pkl.core.parser.syntax; - -import org.pkl.core.util.NonnullByDefault; diff --git a/pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java b/pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java index d772ab87..a117478d 100644 --- a/pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java +++ b/pkl-core/src/main/java/org/pkl/core/repl/ReplServer.java @@ -35,14 +35,6 @@ import org.pkl.core.ast.type.TypeNode; import org.pkl.core.http.HttpClient; import org.pkl.core.module.*; import org.pkl.core.packages.PackageResolver; -import org.pkl.core.parser.Parser; -import org.pkl.core.parser.ParserError; -import org.pkl.core.parser.syntax.Class; -import org.pkl.core.parser.syntax.ClassProperty; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.ModuleDecl; -import org.pkl.core.parser.syntax.ReplInput; import org.pkl.core.project.DeclaredDependencies; import org.pkl.core.repl.ReplRequest.Eval; import org.pkl.core.repl.ReplRequest.Load; @@ -56,6 +48,14 @@ import org.pkl.core.util.EconomicMaps; import org.pkl.core.util.IoUtils; import org.pkl.core.util.MutableReference; import org.pkl.core.util.Nullable; +import org.pkl.parser.Parser; +import org.pkl.parser.ParserError; +import org.pkl.parser.syntax.Class; +import org.pkl.parser.syntax.ClassProperty; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.ModuleDecl; +import org.pkl.parser.syntax.ReplInput; public class ReplServer implements AutoCloseable { private final IndirectCallNode callNode = Truffle.getRuntime().createIndirectCallNode(); @@ -222,9 +222,9 @@ public class ReplServer implements AutoCloseable { } } else if (tree instanceof Class clazz) { addStaticModuleProperty(builder.visitClass(clazz)); - } else if (tree instanceof org.pkl.core.parser.syntax.TypeAlias typeAlias) { + } else if (tree instanceof org.pkl.parser.syntax.TypeAlias typeAlias) { addStaticModuleProperty(builder.visitTypeAlias(typeAlias)); - } else if (tree instanceof org.pkl.core.parser.syntax.ClassMethod classMethod) { + } else if (tree instanceof org.pkl.parser.syntax.ClassMethod classMethod) { addModuleMethodDef(builder.visitClassMethod(classMethod)); } else if (tree instanceof ModuleDecl) { // do nothing for now diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/MinPklVersionChecker.java b/pkl-core/src/main/java/org/pkl/core/runtime/MinPklVersionChecker.java index 598bc7ea..cb22e1be 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/MinPklVersionChecker.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/MinPklVersionChecker.java @@ -18,11 +18,11 @@ package org.pkl.core.runtime; import com.oracle.truffle.api.nodes.Node; import org.pkl.core.Release; import org.pkl.core.Version; -import org.pkl.core.parser.syntax.Module; -import org.pkl.core.parser.syntax.ObjectMember.ObjectProperty; -import org.pkl.core.parser.syntax.Type; -import org.pkl.core.parser.syntax.Type.DeclaredType; import org.pkl.core.util.Nullable; +import org.pkl.parser.syntax.Module; +import org.pkl.parser.syntax.ObjectMember.ObjectProperty; +import org.pkl.parser.syntax.Type; +import org.pkl.parser.syntax.Type.DeclaredType; final class MinPklVersionChecker { private static final Version currentVersion = Release.current().version(); diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java index b925b8c5..80aad08d 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java @@ -24,11 +24,11 @@ import com.oracle.truffle.api.source.Source; import org.pkl.core.ast.builder.AstBuilder; import org.pkl.core.module.ModuleKey; import org.pkl.core.module.ResolvedModuleKey; -import org.pkl.core.parser.Parser; -import org.pkl.core.parser.ParserError; -import org.pkl.core.parser.syntax.Module; import org.pkl.core.util.IoUtils; import org.pkl.core.util.Nullable; +import org.pkl.parser.Parser; +import org.pkl.parser.ParserError; +import org.pkl.parser.syntax.Module; @TruffleLanguage.Registration( id = "pkl", diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmUndefinedValueException.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmUndefinedValueException.java index bf76dc2b..672f6187 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmUndefinedValueException.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmUndefinedValueException.java @@ -22,8 +22,8 @@ import java.util.Deque; import java.util.List; import java.util.Map; import org.pkl.core.StackFrame; -import org.pkl.core.parser.Lexer; import org.pkl.core.util.Nullable; +import org.pkl.parser.Lexer; public final class VmUndefinedValueException extends VmEvalException { private final @Nullable Object receiver; diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java index 9198a268..36e993c0 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmUtils.java @@ -56,11 +56,11 @@ import org.pkl.core.ast.type.UnresolvedTypeNode; import org.pkl.core.module.ModuleKey; import org.pkl.core.module.ModuleKeys; import org.pkl.core.module.ResolvedModuleKey; -import org.pkl.core.parser.Parser; -import org.pkl.core.parser.ParserError; -import org.pkl.core.parser.syntax.Expr; import org.pkl.core.util.EconomicMaps; import org.pkl.core.util.Nullable; +import org.pkl.parser.Parser; +import org.pkl.parser.ParserError; +import org.pkl.parser.syntax.Expr; public final class VmUtils { /** See {@link VmUtils#shouldRunTypeCheck(VirtualFrame)}. */ diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java index 5051fa0e..e19c524b 100644 --- a/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java +++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmValueRenderer.java @@ -18,8 +18,8 @@ package org.pkl.core.runtime; import java.util.ArrayDeque; import java.util.Deque; import org.pkl.core.ValueFormatter; -import org.pkl.core.parser.Lexer; import org.pkl.core.util.MutableBoolean; +import org.pkl.parser.Lexer; /** * Renders values for use in REPL and error messages. Does not force values to avoid consecutive diff --git a/pkl-core/src/main/java/org/pkl/core/stdlib/base/PcfRenderer.java b/pkl-core/src/main/java/org/pkl/core/stdlib/base/PcfRenderer.java index 22db522f..7df605de 100644 --- a/pkl-core/src/main/java/org/pkl/core/stdlib/base/PcfRenderer.java +++ b/pkl-core/src/main/java/org/pkl/core/stdlib/base/PcfRenderer.java @@ -16,7 +16,6 @@ package org.pkl.core.stdlib.base; import org.pkl.core.ValueFormatter; -import org.pkl.core.parser.Lexer; import org.pkl.core.runtime.Identifier; import org.pkl.core.runtime.VmDataSize; import org.pkl.core.runtime.VmDuration; @@ -37,6 +36,7 @@ import org.pkl.core.runtime.VmUtils; import org.pkl.core.stdlib.AbstractRenderer; import org.pkl.core.stdlib.PklConverter; import org.pkl.core.util.LateInit; +import org.pkl.parser.Lexer; public final class PcfRenderer extends AbstractRenderer { private final ValueFormatter valueFormatter; diff --git a/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties b/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties index e5066767..82b175ad 100644 --- a/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties +++ b/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties @@ -99,11 +99,6 @@ A local property definition cannot be amended.\n\ \n\ Use definition syntax instead, for example `local person = new { ... }` instead of `local person { ... }`. -unexpectedCurlyProbablyAmendsExpression=\ -Unexpected token: `'{'`.\n\ -\n\ -If you meant to write an amends expression, wrap the parent in parentheses. Try: `({0}) '{' ... '}'` - moduleCannotExtendSelf=\ Module `{0}` cannot extend itself. @@ -217,35 +212,6 @@ Expected {0} type argument(s) but got {1}. duplicateDefinition=\ Duplicate definition of member `{0}`. -invalidCharacterEscapeSequence=\ -Invalid character escape sequence `{0}`.\n\ -\n\ -Valid character escape sequences are: {1}n {1}r {1}t {1}" {1}\\ - -unterminatedUnicodeEscapeSequence=\ -Unterminated Unicode escape sequence `{0}`.\n\ -\n\ -Unicode escape sequences must end with `}`. - -invalidUnicodeEscapeSequence=\ -Invalid Unicode escape sequence `{0}`.\n\ -\n\ -Valid Unicode escape sequences are {1}'{'0'}' to {1}'{'10FFFF'}' (1-6 hexadecimal characters). - -invalidSeparatorPosition=\ -Unexpected separator character.\n\ -\n\ -The separator character (`_`) cannot follow `0x`, `0b`, `.`, `e`, or 'E' in a number literal. - -stringContentMustBeginOnNewLine=\ -The content of a multi-line string must begin on a new line. - -closingStringDelimiterMustBeginOnNewLine=\ -The closing delimiter of a multi-line string must begin on a new line. - -stringIndentationMustMatchLastLine=\ -Line must match or exceed indentation of the String's last line. - floatTooLarge=\ Float literal `{0}` is too large. @@ -704,11 +670,6 @@ Cannot resolve a triple-dot import from module URI `{0}`.\n\ \n\ Triple-dot imports may only be resolved by module schemes that are considered local, and have hierarchical URIs. -moduleDoesNotSupportDependencies=\ -Module `{0}` does not support importing dependencies.\n\ -\n\ -Dependencies can only be imported in modules that belong to a project, or within a package. - cannotHaveRelativeImport=\ Module `{0}` cannot have a relative import URI. @@ -764,18 +725,6 @@ A value of type `{0}` cannot be exported. incompatiblePklVersion=\ Module `{0}` requires Pkl version {1} or higher, but your Pkl version is {2}. -missingDelimiter=\ -Missing `{0}` delimiter. - -wrongDelimiter=\ -Expected delimiter `{0}`, but got `{1}`. - -danglingDelimiter=\ -Unmatched delimiter `{0}`. - -missingCommaSeparator=\ -Missing `,` separator. - missingFixedModifier=\ Missing modifier `fixed`.\n\ \n\ @@ -855,12 +804,6 @@ The problematic cycles are those declared as local dependencies.\n\ \n\ {0} -multipleUnionDefaults=\ -A type union cannot have more than one default type. - -notAUnion=\ -Only type unions can have a default marker (*). - invalidModuleOutput=\ Expected `{0}` of module `{3}` to be of type `{1}`, but got type `{2}`. @@ -878,11 +821,6 @@ Cannot find a dependency named `{0}`, because it is not declared in the current \n\ To fix this, add it to the `dependencies` section of your `PklProject` file, and resolve your dependencies. -cannotResolveDependencyFromReaderWithOpaqueUris=\ -Cannot resolve dependencies from module reader with opaque URIs.\n\ -\n\ -Module reader for scheme `{0}` does not support hierarchical URIs. - cannotFindDependencyInPackage=\ Cannot find dependency named `{0}`, because it was not declared in package `{1}`. @@ -1080,14 +1018,6 @@ The only supported checksum algorithm is sha256. testsFailed=\ Tests failed. -expectedJarOrFileUrl=\ -Certificates can only be loaded from `jar:` or `file:` URLs, but got:\n\ -{0} - -cannotFindBuiltInCertificates=\ -Cannot find Pkl's trusted CA certificates on the class path.\n\ -To fix this problem, add dependency `org.pkl:pkl-certs`. - # suppress inspection "HttpUrlsUsage" malformedProxyAddress=\ Malformed proxy URI (expecting `http://[:]`): `{0}`. @@ -1127,58 +1057,3 @@ External {0} reader does not support scheme `{1}`. externalReaderAlreadyTerminated=\ External reader process has already terminated. - -keywordNotAllowedHere=\ -Keyword `{0}` is not allowed here.\n\ -\n\ -If you must use this name as identifier, enclose it in backticks. - -unexpectedEndOfFile=\ -Unexpected end of file. - -wrongHeaders=\ -{0} cannot have doc comments, annotations or modifiers. - -invalidTopLevelToken=\ -Invalid token at position. Expected a class, typealias, method, or property. - -interpolationInConstant=\ -String constant cannot have interpolated values. - -unexpectedToken=\ -Unexpected token `{0}`. Expected `{1}`. - -unexpectedToken2=\ -Unexpected token `{0}`. Expected `{1}` or `{2}`. - -unexpectedTokenForExpression=\ -Unexpected token `{0}`. - -unexpectedTokenForType=\ -Unexpected token `{0}`. Expected a type. - -unexpectedTokenForType2=\ -Unexpected token `{0}`. Expected a type or `{1}`. - -typeAnnotationInAmends=\ -Properties with type annotations cannot have object bodies.\n\ -\n\ -To define both a type annotation and an object body, try using assignment instead.\n\ -For example: `obj: Bird = new { ... }`. - -invalidProperty=\ -Invalid property definition. Expected a type annotation, `=` or `{`. - -unexpectedCharacter=\ -Unexpected character `{0}`. Did you mean `{1}`? - -unexpectedCharacter3=\ -Unexpected character `{0}`. Did you mean `{1}`, `{2}` or `{3}`? - -invalidCharacter=\ -Invalid identifier `{0}`. - -danglingDocComment=\ -Dangling documentation comment.\n\ -\n\ -Documentation comments must be attached to modules, classes, typealiases, methods, or properties. diff --git a/pkl-doc/pkl-doc.gradle.kts b/pkl-doc/pkl-doc.gradle.kts index 467d505e..0007477c 100644 --- a/pkl-doc/pkl-doc.gradle.kts +++ b/pkl-doc/pkl-doc.gradle.kts @@ -1,5 +1,5 @@ /* - * Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved. + * Copyright © 2024-2025 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. @@ -26,6 +26,7 @@ dependencies { implementation(projects.pklCore) implementation(projects.pklCommonsCli) implementation(projects.pklCommons) + implementation(projects.pklParser) implementation(libs.commonMark) implementation(libs.commonMarkTables) implementation(libs.kotlinxHtml) diff --git a/pkl-doc/src/main/kotlin/org/pkl/doc/Util.kt b/pkl-doc/src/main/kotlin/org/pkl/doc/Util.kt index b7cced54..ecf49738 100644 --- a/pkl-doc/src/main/kotlin/org/pkl/doc/Util.kt +++ b/pkl-doc/src/main/kotlin/org/pkl/doc/Util.kt @@ -22,9 +22,9 @@ import kotlin.io.path.bufferedWriter import kotlin.io.path.createParentDirectories import kotlin.io.path.outputStream import org.pkl.core.* -import org.pkl.core.parser.Lexer import org.pkl.core.util.IoUtils import org.pkl.core.util.json.JsonWriter +import org.pkl.parser.Lexer // overwrites any existing file internal fun copyResource(resourceName: String, targetDir: Path) { diff --git a/pkl-parser/gradle.lockfile b/pkl-parser/gradle.lockfile new file mode 100644 index 00000000..6364ddd8 --- /dev/null +++ b/pkl-parser/gradle.lockfile @@ -0,0 +1,51 @@ +# This is a Gradle generated file for dependency locking. +# Manual edits can break the build and are not advised. +# This file is expected to be part of source control. +com.google.code.findbugs:jsr305:3.0.2=compileClasspath,compileOnlyDependenciesMetadata +com.tunnelvisionlabs:antlr4-annotations:4.9.0=antlr +com.tunnelvisionlabs:antlr4-runtime:4.9.0=antlr,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +com.tunnelvisionlabs:antlr4:4.9.0=antlr +net.bytebuddy:byte-buddy:1.15.11=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.abego.treelayout:org.abego.treelayout.core:1.0.1=antlr +org.antlr:ST4:4.3=antlr +org.antlr:antlr-runtime:3.5.2=antlr +org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath,testImplementationDependenciesMetadata,testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata +org.assertj:assertj-core:3.27.3=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-build-common:2.0.21=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-api:2.0.21=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-build-tools-impl:2.0.21=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-compiler-runner:2.0.21=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-client:2.0.21=kotlinBuildToolsApiClasspath +org.jetbrains.kotlin:kotlin-daemon-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:2.0.21=kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-native-prebuilt:2.0.21=kotlinNativeBundleConfiguration +org.jetbrains.kotlin:kotlin-reflect:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-script-runtime:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath +org.jetbrains.kotlin:kotlin-scripting-common:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17 +org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17 +org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17 +org.jetbrains.kotlin:kotlin-scripting-jvm:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib-jdk8:2.0.21=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlin:kotlin-stdlib:2.0.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath +org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinCompilerPluginClasspathTestJdk17,kotlinKlibCommonizerClasspath,testCompileClasspath,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-api:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata +org.junit.jupiter:junit-jupiter-api:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.junit.jupiter:junit-jupiter-engine:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata +org.junit.jupiter:junit-jupiter-engine:5.8.2=testJdk17RuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +org.junit.jupiter:junit-jupiter-params:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.junit.jupiter:junit-jupiter:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.junit.platform:junit-platform-commons:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata +org.junit.platform:junit-platform-commons:1.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.junit.platform:junit-platform-engine:1.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata +org.junit.platform:junit-platform-engine:1.8.2=testJdk17RuntimeClasspath +org.junit.platform:junit-platform-launcher:1.8.2=testJdk17RuntimeClasspath +org.junit:junit-bom:5.11.4=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath,testRuntimeOnlyDependenciesMetadata +org.junit:junit-bom:5.8.2=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.opentest4j:opentest4j:1.2.0=testJdk17CompileClasspath,testJdk17ImplementationDependenciesMetadata,testJdk17RuntimeClasspath +org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testImplementationDependenciesMetadata,testRuntimeClasspath +empty=annotationProcessor,apiDependenciesMetadata,generatorAnnotationProcessor,generatorApiDependenciesMetadata,generatorCompileClasspath,generatorCompileOnlyDependenciesMetadata,generatorImplementationDependenciesMetadata,generatorIntransitiveDependenciesMetadata,generatorKotlinScriptDefExtensions,generatorRuntimeClasspath,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,runtimeClasspath,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testIntransitiveDependenciesMetadata,testJdk17AnnotationProcessor,testJdk17ApiDependenciesMetadata,testJdk17CompileOnlyDependenciesMetadata,testJdk17IntransitiveDependenciesMetadata,testJdk17KotlinScriptDefExtensions,testKotlinScriptDefExtensions diff --git a/pkl-parser/pkl-parser.gradle.kts b/pkl-parser/pkl-parser.gradle.kts new file mode 100644 index 00000000..6e0059b6 --- /dev/null +++ b/pkl-parser/pkl-parser.gradle.kts @@ -0,0 +1,85 @@ +/* + * Copyright © 2025 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. + */ +plugins { + pklAllProjects + pklJavaLibrary + pklPublishLibrary + antlr + idea +} + +sourceSets { test { java { srcDir(file("testgenerated/antlr")) } } } + +idea { + module { + // mark src/test/antlr as source dir + // mark generated/antlr as generated source dir + generatedSourceDirs = generatedSourceDirs + files("testgenerated/antlr") + testSources.from(files("src/test/antlr", "testgenerated/antlr")) + } +} + +// workaround for https://github.com/gradle/gradle/issues/820 +configurations.api.get().let { apiConfig -> + apiConfig.setExtendsFrom(apiConfig.extendsFrom.filter { it.name != "antlr" }) +} + +dependencies { + compileOnly(libs.jsr305) + + antlr(libs.antlr) + + testImplementation(projects.pklCommonsTest) + testImplementation(libs.antlrRuntime) +} + +publishing { + publications { + named("library") { + pom { + url.set("https://github.com/apple/pkl/tree/main/pkl-parser") + description.set("The parser for the Pkl language.") + } + } + } +} + +tasks.generateTestGrammarSource { + maxHeapSize = "64m" + + // generate only visitor + arguments = arguments + listOf("-visitor", "-no-listener") + + // Due to https://github.com/antlr/antlr4/issues/2260, + // we can't put .g4 files into src/test/antlr/org/pkl/parser/antlr. + // Instead, we put .g4 files into src/test/antlr, adapt output dir below, + // and use @header directives in .g4 files (instead of setting `-package` argument here) + // and task makeIntelliJAntlrPluginHappy to fix up the IDE story. + outputDirectory = file("testgenerated/antlr/org/pkl/parser/antlr") +} + +tasks.generateGrammarSource { enabled = false } + +tasks.compileTestKotlin { dependsOn(tasks.generateTestGrammarSource) } + +// Satisfy expectations of IntelliJ ANTLR plugin, +// which can't otherwise cope with our ANTLR setup. +val makeIntelliJAntlrPluginHappy by + tasks.registering(Copy::class) { + dependsOn(tasks.generateGrammarSource) + into("test/antlr") + from("testgenerated/antlr/org/pkl/parser/antlr") { include("PklLexer.tokens") } + } diff --git a/pkl-core/src/main/java/org/pkl/core/parser/BaseParserVisitor.java b/pkl-parser/src/main/java/org/pkl/parser/BaseParserVisitor.java similarity index 68% rename from pkl-core/src/main/java/org/pkl/core/parser/BaseParserVisitor.java rename to pkl-parser/src/main/java/org/pkl/parser/BaseParserVisitor.java index 16425345..c23d9612 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/BaseParserVisitor.java +++ b/pkl-parser/src/main/java/org/pkl/parser/BaseParserVisitor.java @@ -13,82 +13,82 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; -import org.pkl.core.parser.syntax.Annotation; -import org.pkl.core.parser.syntax.ArgumentList; -import org.pkl.core.parser.syntax.Class; -import org.pkl.core.parser.syntax.ClassBody; -import org.pkl.core.parser.syntax.ClassMethod; -import org.pkl.core.parser.syntax.ClassProperty; -import org.pkl.core.parser.syntax.DocComment; -import org.pkl.core.parser.syntax.Expr.AmendsExpr; -import org.pkl.core.parser.syntax.Expr.BinaryOperatorExpr; -import org.pkl.core.parser.syntax.Expr.BoolLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FloatLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FunctionLiteralExpr; -import org.pkl.core.parser.syntax.Expr.IfExpr; -import org.pkl.core.parser.syntax.Expr.ImportExpr; -import org.pkl.core.parser.syntax.Expr.IntLiteralExpr; -import org.pkl.core.parser.syntax.Expr.LetExpr; -import org.pkl.core.parser.syntax.Expr.LogicalNotExpr; -import org.pkl.core.parser.syntax.Expr.ModuleExpr; -import org.pkl.core.parser.syntax.Expr.MultiLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.NewExpr; -import org.pkl.core.parser.syntax.Expr.NonNullExpr; -import org.pkl.core.parser.syntax.Expr.NullLiteralExpr; -import org.pkl.core.parser.syntax.Expr.OuterExpr; -import org.pkl.core.parser.syntax.Expr.ParenthesizedExpr; -import org.pkl.core.parser.syntax.Expr.QualifiedAccessExpr; -import org.pkl.core.parser.syntax.Expr.ReadExpr; -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.SubscriptExpr; -import org.pkl.core.parser.syntax.Expr.SuperAccessExpr; -import org.pkl.core.parser.syntax.Expr.SuperSubscriptExpr; -import org.pkl.core.parser.syntax.Expr.ThisExpr; -import org.pkl.core.parser.syntax.Expr.ThrowExpr; -import org.pkl.core.parser.syntax.Expr.TraceExpr; -import org.pkl.core.parser.syntax.Expr.TypeCastExpr; -import org.pkl.core.parser.syntax.Expr.TypeCheckExpr; -import org.pkl.core.parser.syntax.Expr.UnaryMinusExpr; -import org.pkl.core.parser.syntax.Expr.UnqualifiedAccessExpr; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause; -import org.pkl.core.parser.syntax.Identifier; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.Keyword; -import org.pkl.core.parser.syntax.Modifier; -import org.pkl.core.parser.syntax.ModuleDecl; -import org.pkl.core.parser.syntax.Node; -import org.pkl.core.parser.syntax.ObjectBody; -import org.pkl.core.parser.syntax.ObjectMember.ForGenerator; -import org.pkl.core.parser.syntax.ObjectMember.MemberPredicate; -import org.pkl.core.parser.syntax.ObjectMember.ObjectElement; -import org.pkl.core.parser.syntax.ObjectMember.ObjectEntry; -import org.pkl.core.parser.syntax.ObjectMember.ObjectMethod; -import org.pkl.core.parser.syntax.ObjectMember.ObjectProperty; -import org.pkl.core.parser.syntax.ObjectMember.ObjectSpread; -import org.pkl.core.parser.syntax.ObjectMember.WhenGenerator; -import org.pkl.core.parser.syntax.Parameter; -import org.pkl.core.parser.syntax.ParameterList; -import org.pkl.core.parser.syntax.QualifiedIdentifier; -import org.pkl.core.parser.syntax.ReplInput; -import org.pkl.core.parser.syntax.StringConstant; -import org.pkl.core.parser.syntax.StringPart; -import org.pkl.core.parser.syntax.Type.ConstrainedType; -import org.pkl.core.parser.syntax.Type.DeclaredType; -import org.pkl.core.parser.syntax.Type.FunctionType; -import org.pkl.core.parser.syntax.Type.ModuleType; -import org.pkl.core.parser.syntax.Type.NothingType; -import org.pkl.core.parser.syntax.Type.NullableType; -import org.pkl.core.parser.syntax.Type.ParenthesizedType; -import org.pkl.core.parser.syntax.Type.StringConstantType; -import org.pkl.core.parser.syntax.Type.UnionType; -import org.pkl.core.parser.syntax.Type.UnknownType; -import org.pkl.core.parser.syntax.TypeAlias; -import org.pkl.core.parser.syntax.TypeAnnotation; -import org.pkl.core.parser.syntax.TypeArgumentList; -import org.pkl.core.parser.syntax.TypeParameter; -import org.pkl.core.parser.syntax.TypeParameterList; +import org.pkl.parser.syntax.Annotation; +import org.pkl.parser.syntax.ArgumentList; +import org.pkl.parser.syntax.Class; +import org.pkl.parser.syntax.ClassBody; +import org.pkl.parser.syntax.ClassMethod; +import org.pkl.parser.syntax.ClassProperty; +import org.pkl.parser.syntax.DocComment; +import org.pkl.parser.syntax.Expr.AmendsExpr; +import org.pkl.parser.syntax.Expr.BinaryOperatorExpr; +import org.pkl.parser.syntax.Expr.BoolLiteralExpr; +import org.pkl.parser.syntax.Expr.FloatLiteralExpr; +import org.pkl.parser.syntax.Expr.FunctionLiteralExpr; +import org.pkl.parser.syntax.Expr.IfExpr; +import org.pkl.parser.syntax.Expr.ImportExpr; +import org.pkl.parser.syntax.Expr.IntLiteralExpr; +import org.pkl.parser.syntax.Expr.LetExpr; +import org.pkl.parser.syntax.Expr.LogicalNotExpr; +import org.pkl.parser.syntax.Expr.ModuleExpr; +import org.pkl.parser.syntax.Expr.MultiLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.NewExpr; +import org.pkl.parser.syntax.Expr.NonNullExpr; +import org.pkl.parser.syntax.Expr.NullLiteralExpr; +import org.pkl.parser.syntax.Expr.OuterExpr; +import org.pkl.parser.syntax.Expr.ParenthesizedExpr; +import org.pkl.parser.syntax.Expr.QualifiedAccessExpr; +import org.pkl.parser.syntax.Expr.ReadExpr; +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.SubscriptExpr; +import org.pkl.parser.syntax.Expr.SuperAccessExpr; +import org.pkl.parser.syntax.Expr.SuperSubscriptExpr; +import org.pkl.parser.syntax.Expr.ThisExpr; +import org.pkl.parser.syntax.Expr.ThrowExpr; +import org.pkl.parser.syntax.Expr.TraceExpr; +import org.pkl.parser.syntax.Expr.TypeCastExpr; +import org.pkl.parser.syntax.Expr.TypeCheckExpr; +import org.pkl.parser.syntax.Expr.UnaryMinusExpr; +import org.pkl.parser.syntax.Expr.UnqualifiedAccessExpr; +import org.pkl.parser.syntax.ExtendsOrAmendsClause; +import org.pkl.parser.syntax.Identifier; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.Keyword; +import org.pkl.parser.syntax.Modifier; +import org.pkl.parser.syntax.ModuleDecl; +import org.pkl.parser.syntax.Node; +import org.pkl.parser.syntax.ObjectBody; +import org.pkl.parser.syntax.ObjectMember.ForGenerator; +import org.pkl.parser.syntax.ObjectMember.MemberPredicate; +import org.pkl.parser.syntax.ObjectMember.ObjectElement; +import org.pkl.parser.syntax.ObjectMember.ObjectEntry; +import org.pkl.parser.syntax.ObjectMember.ObjectMethod; +import org.pkl.parser.syntax.ObjectMember.ObjectProperty; +import org.pkl.parser.syntax.ObjectMember.ObjectSpread; +import org.pkl.parser.syntax.ObjectMember.WhenGenerator; +import org.pkl.parser.syntax.Parameter; +import org.pkl.parser.syntax.ParameterList; +import org.pkl.parser.syntax.QualifiedIdentifier; +import org.pkl.parser.syntax.ReplInput; +import org.pkl.parser.syntax.StringConstant; +import org.pkl.parser.syntax.StringPart; +import org.pkl.parser.syntax.Type.ConstrainedType; +import org.pkl.parser.syntax.Type.DeclaredType; +import org.pkl.parser.syntax.Type.FunctionType; +import org.pkl.parser.syntax.Type.ModuleType; +import org.pkl.parser.syntax.Type.NothingType; +import org.pkl.parser.syntax.Type.NullableType; +import org.pkl.parser.syntax.Type.ParenthesizedType; +import org.pkl.parser.syntax.Type.StringConstantType; +import org.pkl.parser.syntax.Type.UnionType; +import org.pkl.parser.syntax.Type.UnknownType; +import org.pkl.parser.syntax.TypeAlias; +import org.pkl.parser.syntax.TypeAnnotation; +import org.pkl.parser.syntax.TypeArgumentList; +import org.pkl.parser.syntax.TypeParameter; +import org.pkl.parser.syntax.TypeParameterList; public abstract class BaseParserVisitor implements ParserVisitor { @@ -338,7 +338,7 @@ public abstract class BaseParserVisitor implements ParserVisitor { } @Override - public T visitModule(org.pkl.core.parser.syntax.Module module) { + public T visitModule(org.pkl.parser.syntax.Module module) { return visitChildren(module); } diff --git a/pkl-core/src/main/java/org/pkl/core/parser/Lexer.java b/pkl-parser/src/main/java/org/pkl/parser/Lexer.java similarity index 99% rename from pkl-core/src/main/java/org/pkl/core/parser/Lexer.java rename to pkl-parser/src/main/java/org/pkl/parser/Lexer.java index ba16bfb9..f2db051a 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/Lexer.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Lexer.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; import java.util.ArrayDeque; import java.util.Arrays; import java.util.Deque; -import org.pkl.core.util.ErrorMessages; +import org.pkl.parser.util.ErrorMessages; public class Lexer { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/OperatorResolver.java b/pkl-parser/src/main/java/org/pkl/parser/OperatorResolver.java similarity index 90% rename from pkl-core/src/main/java/org/pkl/core/parser/OperatorResolver.java rename to pkl-parser/src/main/java/org/pkl/parser/OperatorResolver.java index 65aa9fdb..5719c8d9 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/OperatorResolver.java +++ b/pkl-parser/src/main/java/org/pkl/parser/OperatorResolver.java @@ -13,18 +13,18 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; import java.util.ArrayList; import java.util.List; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.Expr.BinaryOperatorExpr; -import org.pkl.core.parser.syntax.Expr.OperatorExpr; -import org.pkl.core.parser.syntax.Expr.TypeCastExpr; -import org.pkl.core.parser.syntax.Expr.TypeCheckExpr; -import org.pkl.core.parser.syntax.Expr.TypeExpr; -import org.pkl.core.parser.syntax.Operator; -import org.pkl.core.util.Nullable; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.Expr.BinaryOperatorExpr; +import org.pkl.parser.syntax.Expr.OperatorExpr; +import org.pkl.parser.syntax.Expr.TypeCastExpr; +import org.pkl.parser.syntax.Expr.TypeCheckExpr; +import org.pkl.parser.syntax.Expr.TypeExpr; +import org.pkl.parser.syntax.Operator; +import org.pkl.parser.util.Nullable; class OperatorResolver { private OperatorResolver() {} diff --git a/pkl-core/src/main/java/org/pkl/core/parser/Parser.java b/pkl-parser/src/main/java/org/pkl/parser/Parser.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/Parser.java rename to pkl-parser/src/main/java/org/pkl/parser/Parser.java index d8699f69..42c0d9f1 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/Parser.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Parser.java @@ -13,80 +13,79 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Supplier; -import org.pkl.core.PklBugException; -import org.pkl.core.parser.syntax.Annotation; -import org.pkl.core.parser.syntax.ArgumentList; -import org.pkl.core.parser.syntax.Class; -import org.pkl.core.parser.syntax.ClassBody; -import org.pkl.core.parser.syntax.ClassMethod; -import org.pkl.core.parser.syntax.ClassProperty; -import org.pkl.core.parser.syntax.DocComment; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.Expr.AmendsExpr; -import org.pkl.core.parser.syntax.Expr.BoolLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FloatLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FunctionLiteralExpr; -import org.pkl.core.parser.syntax.Expr.IfExpr; -import org.pkl.core.parser.syntax.Expr.IntLiteralExpr; -import org.pkl.core.parser.syntax.Expr.LetExpr; -import org.pkl.core.parser.syntax.Expr.LogicalNotExpr; -import org.pkl.core.parser.syntax.Expr.ModuleExpr; -import org.pkl.core.parser.syntax.Expr.MultiLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.NewExpr; -import org.pkl.core.parser.syntax.Expr.NonNullExpr; -import org.pkl.core.parser.syntax.Expr.NullLiteralExpr; -import org.pkl.core.parser.syntax.Expr.OperatorExpr; -import org.pkl.core.parser.syntax.Expr.OuterExpr; -import org.pkl.core.parser.syntax.Expr.ParenthesizedExpr; -import org.pkl.core.parser.syntax.Expr.QualifiedAccessExpr; -import org.pkl.core.parser.syntax.Expr.ReadExpr; -import org.pkl.core.parser.syntax.Expr.ReadType; -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.SubscriptExpr; -import org.pkl.core.parser.syntax.Expr.SuperAccessExpr; -import org.pkl.core.parser.syntax.Expr.SuperSubscriptExpr; -import org.pkl.core.parser.syntax.Expr.ThisExpr; -import org.pkl.core.parser.syntax.Expr.ThrowExpr; -import org.pkl.core.parser.syntax.Expr.TraceExpr; -import org.pkl.core.parser.syntax.Expr.UnaryMinusExpr; -import org.pkl.core.parser.syntax.Expr.UnqualifiedAccessExpr; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause; -import org.pkl.core.parser.syntax.Identifier; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.Keyword; -import org.pkl.core.parser.syntax.Modifier; -import org.pkl.core.parser.syntax.Module; -import org.pkl.core.parser.syntax.ModuleDecl; -import org.pkl.core.parser.syntax.Node; -import org.pkl.core.parser.syntax.ObjectBody; -import org.pkl.core.parser.syntax.ObjectMember; -import org.pkl.core.parser.syntax.Operator; -import org.pkl.core.parser.syntax.Parameter; -import org.pkl.core.parser.syntax.Parameter.TypedIdentifier; -import org.pkl.core.parser.syntax.ParameterList; -import org.pkl.core.parser.syntax.QualifiedIdentifier; -import org.pkl.core.parser.syntax.ReplInput; -import org.pkl.core.parser.syntax.StringConstant; -import org.pkl.core.parser.syntax.StringPart; -import org.pkl.core.parser.syntax.StringPart.StringChars; -import org.pkl.core.parser.syntax.Type; -import org.pkl.core.parser.syntax.Type.DeclaredType; -import org.pkl.core.parser.syntax.Type.ParenthesizedType; -import org.pkl.core.parser.syntax.Type.StringConstantType; -import org.pkl.core.parser.syntax.TypeAlias; -import org.pkl.core.parser.syntax.TypeAnnotation; -import org.pkl.core.parser.syntax.TypeArgumentList; -import org.pkl.core.parser.syntax.TypeParameter; -import org.pkl.core.parser.syntax.TypeParameterList; -import org.pkl.core.util.ErrorMessages; -import org.pkl.core.util.Nullable; +import org.pkl.parser.syntax.Annotation; +import org.pkl.parser.syntax.ArgumentList; +import org.pkl.parser.syntax.Class; +import org.pkl.parser.syntax.ClassBody; +import org.pkl.parser.syntax.ClassMethod; +import org.pkl.parser.syntax.ClassProperty; +import org.pkl.parser.syntax.DocComment; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.Expr.AmendsExpr; +import org.pkl.parser.syntax.Expr.BoolLiteralExpr; +import org.pkl.parser.syntax.Expr.FloatLiteralExpr; +import org.pkl.parser.syntax.Expr.FunctionLiteralExpr; +import org.pkl.parser.syntax.Expr.IfExpr; +import org.pkl.parser.syntax.Expr.IntLiteralExpr; +import org.pkl.parser.syntax.Expr.LetExpr; +import org.pkl.parser.syntax.Expr.LogicalNotExpr; +import org.pkl.parser.syntax.Expr.ModuleExpr; +import org.pkl.parser.syntax.Expr.MultiLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.NewExpr; +import org.pkl.parser.syntax.Expr.NonNullExpr; +import org.pkl.parser.syntax.Expr.NullLiteralExpr; +import org.pkl.parser.syntax.Expr.OperatorExpr; +import org.pkl.parser.syntax.Expr.OuterExpr; +import org.pkl.parser.syntax.Expr.ParenthesizedExpr; +import org.pkl.parser.syntax.Expr.QualifiedAccessExpr; +import org.pkl.parser.syntax.Expr.ReadExpr; +import org.pkl.parser.syntax.Expr.ReadType; +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.SubscriptExpr; +import org.pkl.parser.syntax.Expr.SuperAccessExpr; +import org.pkl.parser.syntax.Expr.SuperSubscriptExpr; +import org.pkl.parser.syntax.Expr.ThisExpr; +import org.pkl.parser.syntax.Expr.ThrowExpr; +import org.pkl.parser.syntax.Expr.TraceExpr; +import org.pkl.parser.syntax.Expr.UnaryMinusExpr; +import org.pkl.parser.syntax.Expr.UnqualifiedAccessExpr; +import org.pkl.parser.syntax.ExtendsOrAmendsClause; +import org.pkl.parser.syntax.Identifier; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.Keyword; +import org.pkl.parser.syntax.Modifier; +import org.pkl.parser.syntax.Module; +import org.pkl.parser.syntax.ModuleDecl; +import org.pkl.parser.syntax.Node; +import org.pkl.parser.syntax.ObjectBody; +import org.pkl.parser.syntax.ObjectMember; +import org.pkl.parser.syntax.Operator; +import org.pkl.parser.syntax.Parameter; +import org.pkl.parser.syntax.Parameter.TypedIdentifier; +import org.pkl.parser.syntax.ParameterList; +import org.pkl.parser.syntax.QualifiedIdentifier; +import org.pkl.parser.syntax.ReplInput; +import org.pkl.parser.syntax.StringConstant; +import org.pkl.parser.syntax.StringPart; +import org.pkl.parser.syntax.StringPart.StringChars; +import org.pkl.parser.syntax.Type; +import org.pkl.parser.syntax.Type.DeclaredType; +import org.pkl.parser.syntax.Type.ParenthesizedType; +import org.pkl.parser.syntax.Type.StringConstantType; +import org.pkl.parser.syntax.TypeAlias; +import org.pkl.parser.syntax.TypeAnnotation; +import org.pkl.parser.syntax.TypeArgumentList; +import org.pkl.parser.syntax.TypeParameter; +import org.pkl.parser.syntax.TypeParameterList; +import org.pkl.parser.util.ErrorMessages; +import org.pkl.parser.util.Nullable; @SuppressWarnings("DuplicatedCode") public class Parser { @@ -1480,7 +1479,7 @@ public class Parser { case HIDDEN -> new Modifier(Modifier.ModifierValue.HIDDEN, next().span); case FIXED -> new Modifier(Modifier.ModifierValue.FIXED, next().span); case CONST -> new Modifier(Modifier.ModifierValue.CONST, next().span); - default -> throw PklBugException.unreachableCode(); + default -> throw new RuntimeException("Unreacheable code"); }; } @@ -1617,7 +1616,7 @@ public class Parser { } case INTERPOLATION_START -> throw parserError("interpolationInConstant"); // the lexer makes sure we only get the above tokens inside a string - default -> throw PklBugException.unreachableCode(); + default -> throw new RuntimeException("Unreacheable code"); } } var end = next().span; @@ -1632,7 +1631,7 @@ public class Parser { case STRING_ESCAPE_TAB -> "\t"; case STRING_ESCAPE_RETURN -> "\r"; case STRING_ESCAPE_UNICODE -> parseUnicodeEscape(tk); - default -> throw PklBugException.unreachableCode(); + default -> throw new RuntimeException("Unreacheable code"); }; } @@ -1797,8 +1796,7 @@ public class Parser { precededBySemicolon = precededBySemicolon || tk == Token.SEMICOLON; tk = lexer.next(); } - return new FullToken( - tk, lexer.span(), lexer.sCursor, lexer.cursor - lexer.sCursor, lexer.newLinesBetween); + return new FullToken(tk, lexer.span(), lexer.newLinesBetween); } // Like next, but don't ignore comments @@ -1817,8 +1815,7 @@ public class Parser { precededBySemicolon = true; tk = lexer.next(); } - return new FullToken( - tk, lexer.span(), lexer.sCursor, lexer.cursor - lexer.sCursor, lexer.newLinesBetween); + return new FullToken(tk, lexer.span(), lexer.newLinesBetween); } /** @@ -1840,10 +1837,9 @@ public class Parser { } } - private record FullToken( - Token token, Span span, int textOffset, int textSize, int newLinesBetween) { + private record FullToken(Token token, Span span, int newLinesBetween) { String text(Lexer lexer) { - return lexer.textFor(textOffset, textSize); + return lexer.textFor(span.charIndex(), span.length()); } } } diff --git a/pkl-core/src/main/java/org/pkl/core/parser/ParserError.java b/pkl-parser/src/main/java/org/pkl/parser/ParserError.java similarity index 91% rename from pkl-core/src/main/java/org/pkl/core/parser/ParserError.java rename to pkl-parser/src/main/java/org/pkl/parser/ParserError.java index a9d26f2f..027575d8 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/ParserError.java +++ b/pkl-parser/src/main/java/org/pkl/parser/ParserError.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; -import org.pkl.core.parser.syntax.Module; -import org.pkl.core.util.Nullable; +import org.pkl.parser.syntax.Module; +import org.pkl.parser.util.Nullable; public class ParserError extends RuntimeException { private final Span span; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/ParserVisitor.java b/pkl-parser/src/main/java/org/pkl/parser/ParserVisitor.java similarity index 60% rename from pkl-core/src/main/java/org/pkl/core/parser/ParserVisitor.java rename to pkl-parser/src/main/java/org/pkl/parser/ParserVisitor.java index e3862fd9..4badd687 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/ParserVisitor.java +++ b/pkl-parser/src/main/java/org/pkl/parser/ParserVisitor.java @@ -13,66 +13,66 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; -import org.pkl.core.parser.syntax.Annotation; -import org.pkl.core.parser.syntax.ArgumentList; -import org.pkl.core.parser.syntax.Class; -import org.pkl.core.parser.syntax.ClassBody; -import org.pkl.core.parser.syntax.ClassMethod; -import org.pkl.core.parser.syntax.ClassProperty; -import org.pkl.core.parser.syntax.DocComment; -import org.pkl.core.parser.syntax.Expr; -import org.pkl.core.parser.syntax.Expr.AmendsExpr; -import org.pkl.core.parser.syntax.Expr.BinaryOperatorExpr; -import org.pkl.core.parser.syntax.Expr.BoolLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FloatLiteralExpr; -import org.pkl.core.parser.syntax.Expr.FunctionLiteralExpr; -import org.pkl.core.parser.syntax.Expr.IfExpr; -import org.pkl.core.parser.syntax.Expr.IntLiteralExpr; -import org.pkl.core.parser.syntax.Expr.LetExpr; -import org.pkl.core.parser.syntax.Expr.LogicalNotExpr; -import org.pkl.core.parser.syntax.Expr.ModuleExpr; -import org.pkl.core.parser.syntax.Expr.MultiLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.NewExpr; -import org.pkl.core.parser.syntax.Expr.NonNullExpr; -import org.pkl.core.parser.syntax.Expr.NullLiteralExpr; -import org.pkl.core.parser.syntax.Expr.OuterExpr; -import org.pkl.core.parser.syntax.Expr.ParenthesizedExpr; -import org.pkl.core.parser.syntax.Expr.QualifiedAccessExpr; -import org.pkl.core.parser.syntax.Expr.ReadExpr; -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr; -import org.pkl.core.parser.syntax.Expr.SubscriptExpr; -import org.pkl.core.parser.syntax.Expr.SuperAccessExpr; -import org.pkl.core.parser.syntax.Expr.SuperSubscriptExpr; -import org.pkl.core.parser.syntax.Expr.ThisExpr; -import org.pkl.core.parser.syntax.Expr.ThrowExpr; -import org.pkl.core.parser.syntax.Expr.TraceExpr; -import org.pkl.core.parser.syntax.Expr.TypeCastExpr; -import org.pkl.core.parser.syntax.Expr.TypeCheckExpr; -import org.pkl.core.parser.syntax.Expr.UnaryMinusExpr; -import org.pkl.core.parser.syntax.Expr.UnqualifiedAccessExpr; -import org.pkl.core.parser.syntax.ExtendsOrAmendsClause; -import org.pkl.core.parser.syntax.Identifier; -import org.pkl.core.parser.syntax.ImportClause; -import org.pkl.core.parser.syntax.Keyword; -import org.pkl.core.parser.syntax.Modifier; -import org.pkl.core.parser.syntax.Module; -import org.pkl.core.parser.syntax.ModuleDecl; -import org.pkl.core.parser.syntax.ObjectBody; -import org.pkl.core.parser.syntax.ObjectMember; -import org.pkl.core.parser.syntax.Parameter; -import org.pkl.core.parser.syntax.ParameterList; -import org.pkl.core.parser.syntax.QualifiedIdentifier; -import org.pkl.core.parser.syntax.ReplInput; -import org.pkl.core.parser.syntax.StringConstant; -import org.pkl.core.parser.syntax.StringPart; -import org.pkl.core.parser.syntax.Type; -import org.pkl.core.parser.syntax.TypeAlias; -import org.pkl.core.parser.syntax.TypeAnnotation; -import org.pkl.core.parser.syntax.TypeArgumentList; -import org.pkl.core.parser.syntax.TypeParameter; -import org.pkl.core.parser.syntax.TypeParameterList; +import org.pkl.parser.syntax.Annotation; +import org.pkl.parser.syntax.ArgumentList; +import org.pkl.parser.syntax.Class; +import org.pkl.parser.syntax.ClassBody; +import org.pkl.parser.syntax.ClassMethod; +import org.pkl.parser.syntax.ClassProperty; +import org.pkl.parser.syntax.DocComment; +import org.pkl.parser.syntax.Expr; +import org.pkl.parser.syntax.Expr.AmendsExpr; +import org.pkl.parser.syntax.Expr.BinaryOperatorExpr; +import org.pkl.parser.syntax.Expr.BoolLiteralExpr; +import org.pkl.parser.syntax.Expr.FloatLiteralExpr; +import org.pkl.parser.syntax.Expr.FunctionLiteralExpr; +import org.pkl.parser.syntax.Expr.IfExpr; +import org.pkl.parser.syntax.Expr.IntLiteralExpr; +import org.pkl.parser.syntax.Expr.LetExpr; +import org.pkl.parser.syntax.Expr.LogicalNotExpr; +import org.pkl.parser.syntax.Expr.ModuleExpr; +import org.pkl.parser.syntax.Expr.MultiLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.NewExpr; +import org.pkl.parser.syntax.Expr.NonNullExpr; +import org.pkl.parser.syntax.Expr.NullLiteralExpr; +import org.pkl.parser.syntax.Expr.OuterExpr; +import org.pkl.parser.syntax.Expr.ParenthesizedExpr; +import org.pkl.parser.syntax.Expr.QualifiedAccessExpr; +import org.pkl.parser.syntax.Expr.ReadExpr; +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr; +import org.pkl.parser.syntax.Expr.SubscriptExpr; +import org.pkl.parser.syntax.Expr.SuperAccessExpr; +import org.pkl.parser.syntax.Expr.SuperSubscriptExpr; +import org.pkl.parser.syntax.Expr.ThisExpr; +import org.pkl.parser.syntax.Expr.ThrowExpr; +import org.pkl.parser.syntax.Expr.TraceExpr; +import org.pkl.parser.syntax.Expr.TypeCastExpr; +import org.pkl.parser.syntax.Expr.TypeCheckExpr; +import org.pkl.parser.syntax.Expr.UnaryMinusExpr; +import org.pkl.parser.syntax.Expr.UnqualifiedAccessExpr; +import org.pkl.parser.syntax.ExtendsOrAmendsClause; +import org.pkl.parser.syntax.Identifier; +import org.pkl.parser.syntax.ImportClause; +import org.pkl.parser.syntax.Keyword; +import org.pkl.parser.syntax.Modifier; +import org.pkl.parser.syntax.Module; +import org.pkl.parser.syntax.ModuleDecl; +import org.pkl.parser.syntax.ObjectBody; +import org.pkl.parser.syntax.ObjectMember; +import org.pkl.parser.syntax.Parameter; +import org.pkl.parser.syntax.ParameterList; +import org.pkl.parser.syntax.QualifiedIdentifier; +import org.pkl.parser.syntax.ReplInput; +import org.pkl.parser.syntax.StringConstant; +import org.pkl.parser.syntax.StringPart; +import org.pkl.parser.syntax.Type; +import org.pkl.parser.syntax.TypeAlias; +import org.pkl.parser.syntax.TypeAnnotation; +import org.pkl.parser.syntax.TypeArgumentList; +import org.pkl.parser.syntax.TypeParameter; +import org.pkl.parser.syntax.TypeParameterList; public interface ParserVisitor { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/Span.java b/pkl-parser/src/main/java/org/pkl/parser/Span.java similarity index 97% rename from pkl-core/src/main/java/org/pkl/core/parser/Span.java rename to pkl-parser/src/main/java/org/pkl/parser/Span.java index 31bc1688..460b2b3b 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/Span.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Span.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; public record Span(int charIndex, int length) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/Token.java b/pkl-parser/src/main/java/org/pkl/parser/Token.java similarity index 99% rename from pkl-core/src/main/java/org/pkl/core/parser/Token.java rename to pkl-parser/src/main/java/org/pkl/parser/Token.java index eacf0ef6..034d02bc 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/Token.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Token.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser; +package org.pkl.parser; public enum Token { ABSTRACT, diff --git a/pkl-parser/src/main/java/org/pkl/parser/package-info.java b/pkl-parser/src/main/java/org/pkl/parser/package-info.java new file mode 100644 index 00000000..9919ca47 --- /dev/null +++ b/pkl-parser/src/main/java/org/pkl/parser/package-info.java @@ -0,0 +1,4 @@ +@NonnullByDefault +package org.pkl.parser; + +import org.pkl.parser.util.NonnullByDefault; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/AbstractNode.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java similarity index 95% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/AbstractNode.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java index 2ab45219..ca60ff5e 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/AbstractNode.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Collections; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract class AbstractNode implements Node { protected final Span span; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Annotation.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java similarity index 88% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Annotation.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java index e08670e2..3ef8ccac 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Annotation.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class Annotation extends AbstractNode { public Annotation(List nodes, Span span) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ArgumentList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java similarity index 88% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ArgumentList.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java index 432876ed..a597b0f0 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ArgumentList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ArgumentList extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Class.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java similarity index 95% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Class.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java index 846074a4..b1452509 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Class.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class Class extends AbstractNode { private final int modifiersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassBody.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java similarity index 91% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassBody.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java index ddfc6827..23654988 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassBody.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.ArrayList; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ClassBody extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassMethod.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java similarity index 94% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassMethod.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java index 4ba6d557..fbf5b881 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassMethod.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ClassMethod extends AbstractNode { private final int modifiersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassProperty.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassProperty.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java index ae4a1996..e1cbf3c2 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ClassProperty.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class ClassProperty extends AbstractNode { private final int modifiersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/DocComment.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java similarity index 90% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/DocComment.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java index a0808110..fbd1552d 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/DocComment.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class DocComment extends AbstractNode { private final List spans; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Expr.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java similarity index 98% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Expr.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java index 58987fc4..77133709 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Expr.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java @@ -13,15 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; -import org.pkl.core.PklBugException; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract sealed class Expr extends AbstractNode { @@ -681,7 +680,7 @@ public abstract sealed class Expr extends AbstractNode { @Override public T accept(ParserVisitor visitor) { // should never be called - throw PklBugException.unreachableCode(); + throw new RuntimeException("Unreacheable code"); } public Operator getOp() { @@ -721,7 +720,7 @@ public abstract sealed class Expr extends AbstractNode { @Override public T accept(ParserVisitor visitor) { // should never be called - throw PklBugException.unreachableCode(); + throw new RuntimeException("Unreacheable code"); } public Type getType() { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ExtendsOrAmendsClause.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java similarity index 92% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ExtendsOrAmendsClause.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java index 4c876c41..8f2d1f10 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ExtendsOrAmendsClause.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ExtendsOrAmendsClause extends AbstractNode { private final Type type; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Identifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java similarity index 94% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Identifier.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java index 09a71462..6fe372f7 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Identifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; public final class Identifier extends AbstractNode { private final String value; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ImportClause.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ImportClause.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java index c75a3c69..a1e4777d 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ImportClause.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Arrays; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class ImportClause extends AbstractNode { private final boolean isGlob; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Keyword.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java similarity index 88% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Keyword.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java index 1f998db1..49b89513 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Keyword.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java @@ -13,10 +13,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; public class Keyword extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Modifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Modifier.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java index 2b47711d..985a218b 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Modifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; public final class Modifier extends AbstractNode { private final ModifierValue value; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Module.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java similarity index 90% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Module.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java index bd641919..c6d21bdf 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Module.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.ArrayList; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class Module extends AbstractNode { public Module(List nodes, Span span) { @@ -52,8 +52,8 @@ public final class Module extends AbstractNode { return res; } - public List getClasses() { - var res = new ArrayList(); + public List getClasses() { + var res = new ArrayList(); assert children != null; for (var child : children) { if (child instanceof Class clazz) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ModuleDecl.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java similarity index 94% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ModuleDecl.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java index 3e096090..316ddde4 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ModuleDecl.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class ModuleDecl extends AbstractNode { private final int modifiersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Node.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java similarity index 87% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Node.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java index e0497af9..1f59596d 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Node.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public interface Node { Span span(); diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectBody.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java similarity index 92% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectBody.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java index 85d21346..677f2a04 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectBody.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; public final class ObjectBody extends AbstractNode { private final int membersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectMember.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java similarity index 98% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectMember.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java index 70fe6d7f..00b9f5c9 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ObjectMember.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract sealed class ObjectMember extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Operator.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Operator.java similarity index 95% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Operator.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Operator.java index af2fcbf6..2edd3f1b 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Operator.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Operator.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; public enum Operator { POW, diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Parameter.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java similarity index 91% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Parameter.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java index d6a4d323..ef5095f7 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Parameter.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract sealed class Parameter extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ParameterList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java similarity index 88% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ParameterList.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java index 402bcf6b..a706c241 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ParameterList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ParameterList extends AbstractNode { public ParameterList(List parameters, Span span) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/QualifiedIdentifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java similarity index 94% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/QualifiedIdentifier.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java index 3a69d3db..c857db5a 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/QualifiedIdentifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; import java.util.stream.Collectors; -import org.pkl.core.parser.ParserVisitor; +import org.pkl.parser.ParserVisitor; public final class QualifiedIdentifier extends AbstractNode { public QualifiedIdentifier(List identifiers) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ReplInput.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java similarity index 87% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/ReplInput.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java index b974dfd4..c773e5c0 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/ReplInput.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class ReplInput extends AbstractNode { public ReplInput(List nodes, Span span) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/StringConstant.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java similarity index 91% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/StringConstant.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java index 05b8cc2f..b6fd9707 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/StringConstant.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class StringConstant extends AbstractNode { private final String string; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/StringPart.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/StringPart.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java index 07a671d6..56f2431d 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/StringPart.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract sealed class StringPart extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Type.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java similarity index 97% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/Type.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java index edd9ef36..34170dcf 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/Type.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public abstract sealed class Type extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAlias.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java similarity index 94% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAlias.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java index 4275c5b5..37634094 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAlias.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class TypeAlias extends AbstractNode { private final int modifiersOffset; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAnnotation.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java similarity index 87% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAnnotation.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java index 6dd1eaca..3505479b 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeAnnotation.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class TypeAnnotation extends AbstractNode { public TypeAnnotation(Type type, Span span) { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeArgumentList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java similarity index 90% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeArgumentList.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java index e4c402dd..b01e99c2 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeArgumentList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; public class TypeArgumentList extends AbstractNode { diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameter.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java similarity index 93% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameter.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java index 6d1e30f3..aae2678a 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameter.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java @@ -13,13 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public final class TypeParameter extends AbstractNode { private final @Nullable Variance variance; diff --git a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameterList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java similarity index 88% rename from pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameterList.java rename to pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java index dffeb9bd..f4297a28 100644 --- a/pkl-core/src/main/java/org/pkl/core/parser/syntax/TypeParameterList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser.syntax; +package org.pkl.parser.syntax; import java.util.List; -import org.pkl.core.parser.ParserVisitor; -import org.pkl.core.parser.Span; -import org.pkl.core.util.Nullable; +import org.pkl.parser.ParserVisitor; +import org.pkl.parser.Span; +import org.pkl.parser.util.Nullable; public class TypeParameterList extends AbstractNode { public TypeParameterList(List parameters, Span span) { diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java new file mode 100644 index 00000000..19881c4f --- /dev/null +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java @@ -0,0 +1,4 @@ +@NonnullByDefault +package org.pkl.parser.syntax; + +import org.pkl.parser.util.NonnullByDefault; diff --git a/pkl-parser/src/main/java/org/pkl/parser/util/ErrorMessages.java b/pkl-parser/src/main/java/org/pkl/parser/util/ErrorMessages.java new file mode 100644 index 00000000..80ef5c08 --- /dev/null +++ b/pkl-parser/src/main/java/org/pkl/parser/util/ErrorMessages.java @@ -0,0 +1,36 @@ +/* + * Copyright © 2025 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. + */ +package org.pkl.parser.util; + +import java.text.MessageFormat; +import java.util.Locale; +import java.util.ResourceBundle; + +public final class ErrorMessages { + private ErrorMessages() {} + + public static String create(String messageName, Object... args) { + var locale = Locale.getDefault(); + var errorMessage = + ResourceBundle.getBundle("org.pkl.parser.errorMessages", locale).getString(messageName); + + // only format if `errorMessage` is a format string + if (args.length == 0) return errorMessage; + + var formatter = new MessageFormat(errorMessage, locale); + return formatter.format(args); + } +} diff --git a/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java b/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java new file mode 100644 index 00000000..93bc3cbb --- /dev/null +++ b/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java @@ -0,0 +1,41 @@ +/* + * Copyright © 2025 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. + */ +package org.pkl.parser.util; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Indicates that method return types and method parameters in the annotated package are Nonnull + * unless explicitly annotated with {@link Nullable}. + * + *

This annotation is a generalization of {@link javax.annotation.ParametersAreNonnullByDefault}. + * All Pkl packages containing Java code should carry this annotation. + * + *

Ideally, this default would apply to every {@link ElementType#TYPE_USE}, but I haven't been + * able to make this work reasonably in IntelliJ. + */ +@Documented +@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_PARAMETER}) +@javax.annotation.Nonnull +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.PACKAGE) +public @interface NonnullByDefault {} diff --git a/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java b/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java new file mode 100644 index 00000000..ce61c5e0 --- /dev/null +++ b/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java @@ -0,0 +1,38 @@ +/* + * Copyright © 2024-2025 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. + */ +package org.pkl.parser.util; + +import static javax.annotation.meta.When.MAYBE; + +import java.lang.annotation.Documented; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import javax.annotation.meta.TypeQualifierNickname; + +@Target({ + ElementType.TYPE_PARAMETER, + ElementType.TYPE_USE, + ElementType.PARAMETER, + ElementType.FIELD, + ElementType.METHOD +}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +@javax.annotation.Nonnull(when = MAYBE) +@TypeQualifierNickname +public @interface Nullable {} diff --git a/pkl-parser/src/main/resources/org/pkl/parser/errorMessages.properties b/pkl-parser/src/main/resources/org/pkl/parser/errorMessages.properties new file mode 100644 index 00000000..3eeb40a0 --- /dev/null +++ b/pkl-parser/src/main/resources/org/pkl/parser/errorMessages.properties @@ -0,0 +1,97 @@ +unexpectedCharacter=\ +Unexpected character `{0}`. Did you mean `{1}`? + +unexpectedCharacter3=\ +Unexpected character `{0}`. Did you mean `{1}`, `{2}` or `{3}`? + +unexpectedToken=\ +Unexpected token `{0}`. Expected `{1}`. + +unexpectedToken2=\ +Unexpected token `{0}`. Expected `{1}` or `{2}`. + +unexpectedTokenForExpression=\ +Unexpected token `{0}`. + +unexpectedTokenForType=\ +Unexpected token `{0}`. Expected a type. + +unexpectedTokenForType2=\ +Unexpected token `{0}`. Expected a type or `{1}`. + +unexpectedCurlyProbablyAmendsExpression=\ +Unexpected token: `'{'`.\n\ +\n\ +If you meant to write an amends expression, wrap the parent in parentheses. Try: `({0}) '{' ... '}'` + +unexpectedEndOfFile=\ +Unexpected end of file. + +invalidCharacter=\ +Invalid identifier `{0}`. + +invalidTopLevelToken=\ +Invalid token at position. Expected a class, typealias, method, or property. + +invalidProperty=\ +Invalid property definition. Expected a type annotation, `=` or `{`. + +invalidSeparatorPosition=\ +Unexpected separator character.\n\ +\n\ +The separator character (`_`) cannot follow `0x`, `0b`, `.`, `e`, or 'E' in a number literal. + +invalidCharacterEscapeSequence=\ +Invalid character escape sequence `{0}`.\n\ +\n\ +Valid character escape sequences are: {1}n {1}r {1}t {1}" {1}\\ + +invalidUnicodeEscapeSequence=\ +Invalid Unicode escape sequence `{0}`.\n\ +\n\ +Valid Unicode escape sequences are {1}'{'0'}' to {1}'{'10FFFF'}' (1-6 hexadecimal characters). + +missingDelimiter=\ +Missing `{0}` delimiter. + +unterminatedUnicodeEscapeSequence=\ +Unterminated Unicode escape sequence `{0}`.\n\ +\n\ +Unicode escape sequences must end with `}`. + +keywordNotAllowedHere=\ +Keyword `{0}` is not allowed here.\n\ +\n\ +If you must use this name as identifier, enclose it in backticks. + +typeAnnotationInAmends=\ +Properties with type annotations cannot have object bodies.\n\ +\n\ +To define both a type annotation and an object body, try using assignment instead.\n\ +For example: `obj: Bird = new { ... }`. + +stringContentMustBeginOnNewLine=\ +The content of a multi-line string must begin on a new line. + +stringIndentationMustMatchLastLine=\ +Line must match or exceed indentation of the String's last line. + +closingStringDelimiterMustBeginOnNewLine=\ +The closing delimiter of a multi-line string must begin on a new line. + +interpolationInConstant=\ +String constant cannot have interpolated values. + +multipleUnionDefaults=\ +A type union cannot have more than one default type. + +notAUnion=\ +Only type unions can have a default marker (*). + +wrongHeaders=\ +{0} cannot have doc comments, annotations or modifiers. + +danglingDocComment=\ +Dangling documentation comment.\n\ +\n\ +Documentation comments must be attached to modules, classes, typealiases, methods, or properties. diff --git a/pkl-core/src/test/antlr/PklLexer.g4 b/pkl-parser/src/test/antlr/PklLexer.g4 similarity index 99% rename from pkl-core/src/test/antlr/PklLexer.g4 rename to pkl-parser/src/test/antlr/PklLexer.g4 index 517e8d4d..c942b9b2 100644 --- a/pkl-core/src/test/antlr/PklLexer.g4 +++ b/pkl-parser/src/test/antlr/PklLexer.g4 @@ -16,7 +16,7 @@ lexer grammar PklLexer; @header { -package org.pkl.core.parser.antlr; +package org.pkl.parser.antlr; } @members { diff --git a/pkl-core/src/test/antlr/PklParser.g4 b/pkl-parser/src/test/antlr/PklParser.g4 similarity index 99% rename from pkl-core/src/test/antlr/PklParser.g4 rename to pkl-parser/src/test/antlr/PklParser.g4 index b3c624ec..b4ef1d79 100644 --- a/pkl-core/src/test/antlr/PklParser.g4 +++ b/pkl-parser/src/test/antlr/PklParser.g4 @@ -16,7 +16,7 @@ parser grammar PklParser; @header { -package org.pkl.core.parser.antlr; +package org.pkl.parser.antlr; } @members { diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/ANTLRSexpRenderer.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/ANTLRSexpRenderer.kt similarity index 99% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/ANTLRSexpRenderer.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/ANTLRSexpRenderer.kt index 3bf2adc9..06c05acc 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/ANTLRSexpRenderer.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/ANTLRSexpRenderer.kt @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import org.antlr.v4.runtime.ParserRuleContext -import org.pkl.core.parser.antlr.PklLexer -import org.pkl.core.parser.antlr.PklParser.* +import org.pkl.parser.antlr.PklLexer +import org.pkl.parser.antlr.PklParser.* @Suppress("MemberVisibilityCanBePrivate") class ANTLRSexpRenderer { diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/LexerTest.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/LexerTest.kt similarity index 98% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/LexerTest.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/LexerTest.kt index c476f34c..3b6e31cc 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/LexerTest.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/LexerTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTest.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt similarity index 96% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTest.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt index e298dfda..6bfb7731 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTest.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import java.nio.file.Path import kotlin.io.path.Path @@ -60,7 +60,7 @@ class ParserComparisonTest : ParserComparisonTestInterface { } override fun getSnippets(): List { - return Path("src/test/files/LanguageSnippetTests/input") + return Path("../pkl-core/src/test/files/LanguageSnippetTests/input") .walk() .filter { path -> val pathStr = path.toString().replace("\\", "/") diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTestInterface.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTestInterface.kt similarity index 96% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTestInterface.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTestInterface.kt index b10f2d0f..bdb079fc 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/ParserComparisonTestInterface.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTestInterface.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import java.nio.file.Path import kotlin.io.path.pathString @@ -25,8 +25,8 @@ import org.assertj.core.api.SoftAssertions import org.junit.jupiter.api.Test import org.junit.jupiter.api.parallel.Execution import org.junit.jupiter.api.parallel.ExecutionMode -import org.pkl.core.parser.antlr.PklLexer -import org.pkl.core.parser.antlr.PklParser +import org.pkl.parser.antlr.PklLexer +import org.pkl.parser.antlr.PklParser @Execution(ExecutionMode.CONCURRENT) interface ParserComparisonTestInterface { diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/SexpRenderer.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/SexpRenderer.kt similarity index 97% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/SexpRenderer.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/SexpRenderer.kt index e0eac437..819e6525 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/SexpRenderer.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/SexpRenderer.kt @@ -13,29 +13,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser -import org.pkl.core.parser.syntax.* -import org.pkl.core.parser.syntax.Annotation -import org.pkl.core.parser.syntax.Expr.* -import org.pkl.core.parser.syntax.Expr.ModuleExpr -import org.pkl.core.parser.syntax.ObjectMember.* -import org.pkl.core.parser.syntax.Parameter.TypedIdentifier -import org.pkl.core.parser.syntax.Type.* +import org.pkl.parser.syntax.* +import org.pkl.parser.syntax.Annotation +import org.pkl.parser.syntax.Expr.* +import org.pkl.parser.syntax.Expr.ModuleExpr +import org.pkl.parser.syntax.ObjectMember.* +import org.pkl.parser.syntax.Parameter.TypedIdentifier +import org.pkl.parser.syntax.Type.* @Suppress("MemberVisibilityCanBePrivate") class SexpRenderer { private var tab = "" private var buf = StringBuilder() - fun render(mod: org.pkl.core.parser.syntax.Module): String { + fun render(mod: org.pkl.parser.syntax.Module): String { renderModule(mod) val res = buf.toString() reset() return res } - fun renderModule(mod: org.pkl.core.parser.syntax.Module) { + fun renderModule(mod: org.pkl.parser.syntax.Module) { buf.append(tab) buf.append("(module") val oldTab = increaseTab() @@ -1055,7 +1055,7 @@ class SexpRenderer { } companion object { - private fun sortModuleEntries(mod: org.pkl.core.parser.syntax.Module): List { + private fun sortModuleEntries(mod: org.pkl.parser.syntax.Module): List { val res = mutableListOf() res += mod.classes res += mod.typeAliases diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/SpanComparison.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/SpanComparison.kt similarity index 88% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/SpanComparison.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/SpanComparison.kt index bdeaeeaf..b1cdc6e8 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/SpanComparison.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/SpanComparison.kt @@ -13,53 +13,53 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import org.antlr.v4.runtime.ParserRuleContext import org.antlr.v4.runtime.tree.TerminalNode import org.assertj.core.api.SoftAssertions -import org.pkl.core.parser.antlr.PklParser.* -import org.pkl.core.parser.syntax.* -import org.pkl.core.parser.syntax.Annotation -import org.pkl.core.parser.syntax.Expr.AmendsExpr -import org.pkl.core.parser.syntax.Expr.BinaryOperatorExpr -import org.pkl.core.parser.syntax.Expr.FunctionLiteralExpr -import org.pkl.core.parser.syntax.Expr.IfExpr -import org.pkl.core.parser.syntax.Expr.ImportExpr -import org.pkl.core.parser.syntax.Expr.LetExpr -import org.pkl.core.parser.syntax.Expr.LogicalNotExpr -import org.pkl.core.parser.syntax.Expr.MultiLineStringLiteralExpr -import org.pkl.core.parser.syntax.Expr.NewExpr -import org.pkl.core.parser.syntax.Expr.NonNullExpr -import org.pkl.core.parser.syntax.Expr.ParenthesizedExpr -import org.pkl.core.parser.syntax.Expr.QualifiedAccessExpr -import org.pkl.core.parser.syntax.Expr.ReadExpr -import org.pkl.core.parser.syntax.Expr.SingleLineStringLiteralExpr -import org.pkl.core.parser.syntax.Expr.SubscriptExpr -import org.pkl.core.parser.syntax.Expr.SuperAccessExpr -import org.pkl.core.parser.syntax.Expr.SuperSubscriptExpr -import org.pkl.core.parser.syntax.Expr.ThrowExpr -import org.pkl.core.parser.syntax.Expr.TraceExpr -import org.pkl.core.parser.syntax.Expr.TypeCastExpr -import org.pkl.core.parser.syntax.Expr.TypeCheckExpr -import org.pkl.core.parser.syntax.Expr.UnaryMinusExpr -import org.pkl.core.parser.syntax.Expr.UnqualifiedAccessExpr -import org.pkl.core.parser.syntax.ObjectMember.ForGenerator -import org.pkl.core.parser.syntax.ObjectMember.MemberPredicate -import org.pkl.core.parser.syntax.ObjectMember.ObjectElement -import org.pkl.core.parser.syntax.ObjectMember.ObjectEntry -import org.pkl.core.parser.syntax.ObjectMember.ObjectMethod -import org.pkl.core.parser.syntax.ObjectMember.ObjectProperty -import org.pkl.core.parser.syntax.ObjectMember.ObjectSpread -import org.pkl.core.parser.syntax.ObjectMember.WhenGenerator -import org.pkl.core.parser.syntax.Parameter.TypedIdentifier -import org.pkl.core.parser.syntax.Type.ConstrainedType -import org.pkl.core.parser.syntax.Type.DeclaredType -import org.pkl.core.parser.syntax.Type.FunctionType -import org.pkl.core.parser.syntax.Type.NullableType -import org.pkl.core.parser.syntax.Type.ParenthesizedType -import org.pkl.core.parser.syntax.Type.StringConstantType -import org.pkl.core.parser.syntax.Type.UnionType +import org.pkl.parser.antlr.PklParser.* +import org.pkl.parser.syntax.* +import org.pkl.parser.syntax.Annotation +import org.pkl.parser.syntax.Expr.AmendsExpr +import org.pkl.parser.syntax.Expr.BinaryOperatorExpr +import org.pkl.parser.syntax.Expr.FunctionLiteralExpr +import org.pkl.parser.syntax.Expr.IfExpr +import org.pkl.parser.syntax.Expr.ImportExpr +import org.pkl.parser.syntax.Expr.LetExpr +import org.pkl.parser.syntax.Expr.LogicalNotExpr +import org.pkl.parser.syntax.Expr.MultiLineStringLiteralExpr +import org.pkl.parser.syntax.Expr.NewExpr +import org.pkl.parser.syntax.Expr.NonNullExpr +import org.pkl.parser.syntax.Expr.ParenthesizedExpr +import org.pkl.parser.syntax.Expr.QualifiedAccessExpr +import org.pkl.parser.syntax.Expr.ReadExpr +import org.pkl.parser.syntax.Expr.SingleLineStringLiteralExpr +import org.pkl.parser.syntax.Expr.SubscriptExpr +import org.pkl.parser.syntax.Expr.SuperAccessExpr +import org.pkl.parser.syntax.Expr.SuperSubscriptExpr +import org.pkl.parser.syntax.Expr.ThrowExpr +import org.pkl.parser.syntax.Expr.TraceExpr +import org.pkl.parser.syntax.Expr.TypeCastExpr +import org.pkl.parser.syntax.Expr.TypeCheckExpr +import org.pkl.parser.syntax.Expr.UnaryMinusExpr +import org.pkl.parser.syntax.Expr.UnqualifiedAccessExpr +import org.pkl.parser.syntax.ObjectMember.ForGenerator +import org.pkl.parser.syntax.ObjectMember.MemberPredicate +import org.pkl.parser.syntax.ObjectMember.ObjectElement +import org.pkl.parser.syntax.ObjectMember.ObjectEntry +import org.pkl.parser.syntax.ObjectMember.ObjectMethod +import org.pkl.parser.syntax.ObjectMember.ObjectProperty +import org.pkl.parser.syntax.ObjectMember.ObjectSpread +import org.pkl.parser.syntax.ObjectMember.WhenGenerator +import org.pkl.parser.syntax.Parameter.TypedIdentifier +import org.pkl.parser.syntax.Type.ConstrainedType +import org.pkl.parser.syntax.Type.DeclaredType +import org.pkl.parser.syntax.Type.FunctionType +import org.pkl.parser.syntax.Type.NullableType +import org.pkl.parser.syntax.Type.ParenthesizedType +import org.pkl.parser.syntax.Type.StringConstantType +import org.pkl.parser.syntax.Type.UnionType class SpanComparison(val path: String, private val softly: SoftAssertions) { diff --git a/pkl-core/src/test/kotlin/org/pkl/core/parser/SpanTest.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/SpanTest.kt similarity index 97% rename from pkl-core/src/test/kotlin/org/pkl/core/parser/SpanTest.kt rename to pkl-parser/src/test/kotlin/org/pkl/parser/SpanTest.kt index 4dcd7af0..f17c5627 100644 --- a/pkl-core/src/test/kotlin/org/pkl/core/parser/SpanTest.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/SpanTest.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.pkl.core.parser +package org.pkl.parser import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Test diff --git a/settings.gradle.kts b/settings.gradle.kts index cdb2dbd1..ccac20b8 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -43,6 +43,8 @@ include("pkl-executor") include("pkl-gradle") +include("pkl-parser") + include("pkl-server") include("pkl-tools")