Improve error message when parsing truncated let expressions (#1639)

This previously yielded
```
Unexpected token `}`. Expected `}`.
```
Pretty confusing, no?

Now it's just
```
Unexpected token `}`.
```

Resolves #1638
This commit is contained in:
Jen Basch
2026-06-02 16:00:46 -07:00
committed by GitHub
parent 99cac1f886
commit 68f7d06eed
5 changed files with 12 additions and 2 deletions
@@ -0,0 +1,3 @@
foo {
bar = let (qux = 1)
}
@@ -0,0 +1,6 @@
–– Pkl Error ––
Unexpected token `}`.
x | }
^
at letExpressionError3 (file:///$snippetsDir/input/errors/letExpressionError3.pkl)
@@ -888,7 +888,7 @@ class GenericParserImpl {
expect(Token.RPAREN, paramDef, "unexpectedToken", ")");
children.add(new Node(NodeType.LET_PARAMETER_DEFINITION, paramDef));
ff(children);
children.add(parseExpr(expectation));
children.add(parseExpr());
yield new Node(NodeType.LET_EXPR, children);
}
case TRUE, FALSE -> new Node(NodeType.BOOL_LITERAL_EXPR, next().span);
@@ -1009,7 +1009,7 @@ final class ParserImpl {
expect(Token.ASSIGN, "unexpectedToken", "=");
var bindExpr = parseExpr(")");
expect(Token.RPAREN, "unexpectedToken", ")");
var exp = parseExpr(expectation);
var exp = parseExpr();
yield new LetExpr(param, bindExpr, exp, start.endWith(exp.span()));
}
case TRUE -> new BoolLiteralExpr(true, next().span);
@@ -99,6 +99,7 @@ class ParserComparisonTest {
"errors/invalidCharacterEscape.pkl",
"errors/invalidCharacterEscape2.pkl",
"errors/invalidUnicodeEscape.pkl",
"errors/letExpressionError3.pkl",
"errors/unterminatedUnicodeEscape.pkl",
"errors/keywordNotAllowedHere1.pkl",
"errors/keywordNotAllowedHere2.pkl",