diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/modules/invalidModule1.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/modules/invalidModule1.pkl new file mode 100644 index 00000000..db3f1f31 --- /dev/null +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/modules/invalidModule1.pkl @@ -0,0 +1 @@ +module "DoNotQuote" diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/modules/invalidModule1.err b/pkl-core/src/test/files/LanguageSnippetTests/output/modules/invalidModule1.err new file mode 100644 index 00000000..7387cea3 --- /dev/null +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/modules/invalidModule1.err @@ -0,0 +1,6 @@ +–– Pkl Error –– +Unexpected token `"`. Expected `identifier`. + +x | module "DoNotQuote" + ^ +at invalidModule1 (file:///$snippetsDir/input/modules/invalidModule1.pkl) diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java index c6d21bdf..8e8e4797 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java @@ -33,7 +33,8 @@ public final class Module extends AbstractNode { public @Nullable ModuleDecl getDecl() { assert children != null; - return (ModuleDecl) children.get(0); + // children can be empty when there was a parse error + return children.isEmpty() ? null : (ModuleDecl) children.get(0); } public List getImports() { diff --git a/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt index 6bfb7731..41ef3e64 100644 --- a/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt @@ -91,6 +91,7 @@ class ParserComparisonTest : ParserComparisonTestInterface { "errors/underscore.pkl", "notAUnionDefault.pkl", "multipleDefaults.pkl", + "modules/invalidModule1.pkl", ) private val regexExceptions =