Skip to content

Commit 03a4329

Browse files
authored
Parser: fix unfinished tuple range (#13402)
1 parent 5989aa4 commit 03a4329

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

src/Compiler/pars.fsy

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4176,34 +4176,34 @@ ifExprElifs:
41764176
| ELIF declExpr recover
41774177
{ None, Some (exprFromParseError $2) }
41784178

4179-
tupleExpr:
4180-
| tupleExpr COMMA declExpr
4181-
{ let exprs, commas = $1 in ($3 :: exprs), ((rhs parseState 2) :: commas) }
4179+
tupleExpr:
4180+
| tupleExpr COMMA declExpr
4181+
{ let exprs, commas = $1
4182+
$3 :: exprs, (rhs parseState 2 :: commas) }
41824183

41834184
| tupleExpr COMMA ends_coming_soon_or_recover
4184-
{ if not $3 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsExpectedExpressionAfterToken())
4185-
let exprs, commas = $1
4186-
let zeroWidthAtNextToken = (rhs parseState 3).StartRange
4187-
((arbExpr("tupleExpr1", zeroWidthAtNextToken)) :: exprs), (rhs parseState 2) :: commas }
4185+
{ let commaRange = rhs parseState 2
4186+
if not $3 then reportParseErrorAt commaRange (FSComp.SR.parsExpectedExpressionAfterToken ())
4187+
let exprs, commas = $1
4188+
arbExpr ("tupleExpr1", commaRange.EndRange) :: exprs, commaRange :: commas }
41884189

41894190
| declExpr COMMA ends_coming_soon_or_recover
4190-
{ if not $3 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsExpectedExpressionAfterToken())
4191-
let zeroWidthAtNextToken = (rhs parseState 3).StartRange
4192-
((arbExpr("tupleExpr2", zeroWidthAtNextToken)) :: [$1]), [rhs parseState 2] }
4191+
{ let commaRange = rhs parseState 2
4192+
if not $3 then reportParseErrorAt commaRange (FSComp.SR.parsExpectedExpressionAfterToken ())
4193+
[arbExpr ("tupleExpr2", commaRange.EndRange); $1], [commaRange] }
41934194

4194-
| declExpr COMMA declExpr
4195-
{ [$3 ; $1], [rhs parseState 2] }
4195+
| declExpr COMMA declExpr
4196+
{ [$3; $1], [rhs parseState 2] }
41964197

41974198
| COMMA declExpr
41984199
{ let commaRange = rhs parseState 1
4199-
reportParseErrorAt commaRange (FSComp.SR.parsExpectingExpressionInTuple())
4200+
reportParseErrorAt commaRange (FSComp.SR.parsExpectingExpressionInTuple ())
42004201
[$2; arbExpr ("tupleExpr3", commaRange.StartRange)], [commaRange] }
42014202

42024203
| COMMA ends_coming_soon_or_recover
4203-
{ if not $2 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsExpectedExpressionAfterToken())
4204-
let commaRange = rhs parseState 1
4205-
let zeroWidthAtNextToken = (rhs parseState 2).StartRange
4206-
[(arbExpr("tupleExpr4", zeroWidthAtNextToken)); arbExpr ("tupleExpr5", commaRange.StartRange)], [commaRange] }
4204+
{ let commaRange = rhs parseState 1
4205+
if not $2 then reportParseErrorAt commaRange (FSComp.SR.parsExpectedExpressionAfterToken ())
4206+
[arbExpr ("tupleExpr4", commaRange.EndRange); arbExpr ("tupleExpr5", commaRange.StartRange)], [commaRange] }
42074207

42084208
minusExpr:
42094209
| MINUS minusExpr %prec expr_prefix_plus_minus

tests/service/ParserTests.fs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,3 +322,14 @@ let ``Expr - Tuple 06`` () =
322322
SynExpr.ArbitraryAfterError _
323323
SynExpr.Const _ ], _, _) ] -> ()
324324
| _ -> failwith "Unexpected tree"
325+
326+
[<Test>]
327+
let ``Expr - Tuple 07`` () =
328+
let parseResults = getParseResults """
329+
let x = 1,
330+
"""
331+
match getSingleModuleMemberDecls parseResults with
332+
| [ SynModuleDecl.Let(_, [ (SynBinding(expr = expr)) ], range) ] ->
333+
shouldEqual expr.Range.StartLine expr.Range.EndLine
334+
shouldEqual range.StartLine range.EndLine
335+
| _ -> failwith "Unexpected tree"

0 commit comments

Comments
 (0)