diff --git a/pkl-core/src/test/files/LanguageSnippetTests/input/errors/emptyParenthesizedTypeAnnotation.pkl b/pkl-core/src/test/files/LanguageSnippetTests/input/errors/emptyParenthesizedTypeAnnotation.pkl new file mode 100644 index 00000000..b3b2105e --- /dev/null +++ b/pkl-core/src/test/files/LanguageSnippetTests/input/errors/emptyParenthesizedTypeAnnotation.pkl @@ -0,0 +1 @@ +foo: Int|()|String = "foo" diff --git a/pkl-core/src/test/files/LanguageSnippetTests/output/errors/emptyParenthesizedTypeAnnotation.err b/pkl-core/src/test/files/LanguageSnippetTests/output/errors/emptyParenthesizedTypeAnnotation.err new file mode 100644 index 00000000..7a192956 --- /dev/null +++ b/pkl-core/src/test/files/LanguageSnippetTests/output/errors/emptyParenthesizedTypeAnnotation.err @@ -0,0 +1,6 @@ +–– Pkl Error –– +Unexpected token `)`. Expected a type. + +x | foo: Int|()|String = "foo" + ^ +at emptyParenthesizedTypeAnnotation (file:///$snippetsDir/input/errors/emptyParenthesizedTypeAnnotation.pkl) diff --git a/pkl-parser/src/main/java/org/pkl/parser/Parser.java b/pkl-parser/src/main/java/org/pkl/parser/Parser.java index 14aee97d..1c85126d 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/Parser.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Parser.java @@ -1393,6 +1393,9 @@ public class Parser { children.add(ret); typ = new Type.FunctionType(children, tk.span.endWith(ret.span())); } else { + if (children.isEmpty()) { + throw new ParserError(ErrorMessages.create("unexpectedTokenForType", ")"), end); + } typ = new ParenthesizedType((Type) children.get(0), tk.span.endWith(end)); } } 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 a9c7bb56..7f6dd398 100644 --- a/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt +++ b/pkl-parser/src/test/kotlin/org/pkl/parser/ParserComparisonTest.kt @@ -105,6 +105,7 @@ class ParserComparisonTest { "errors/moduleWithHighMinPklVersionAndParseErrors.pkl", "errors/underscore.pkl", "errors/shebang.pkl", + "errors/emptyParenthesizedTypeAnnotation.pkl", "notAUnionDefault.pkl", "multipleDefaults.pkl", "modules/invalidModule1.pkl",