未验证 提交 024b98d0 编写于 作者: E Eugene Auduchinok 提交者: GitHub

Parser: rewrite tuple expr recovery to allow better items recovery (#15227)

上级 448ab614
......@@ -939,15 +939,6 @@ let mkDynamicArgExpr expr =
| SynExpr.Paren (expr = e) -> e
| e -> e
let rec normalizeTupleExpr exprs commas : SynExpr list * range list =
match exprs with
| SynExpr.Tuple (false, innerExprs, innerCommas, _) :: rest ->
let innerExprs, innerCommas =
normalizeTupleExpr (List.rev innerExprs) (List.rev innerCommas)
innerExprs @ rest, innerCommas @ commas
| _ -> exprs, commas
let rec normalizeTuplePat pats commas : SynPat list * range List =
match pats with
| SynPat.Tuple (false, innerPats, innerCommas, _) :: rest ->
......
......@@ -331,8 +331,6 @@ val prependIdentInLongIdentWithTrivia: ident: SynIdent -> mDot: range -> lid: Sy
val mkDynamicArgExpr: expr: SynExpr -> SynExpr
val normalizeTupleExpr: exprs: SynExpr list -> commas: range list -> SynExpr list * range List
val normalizeTuplePat: pats: SynPat list -> commas: range list -> SynPat list * range List
val desugarGetSetMembers: memberDefns: SynMemberDefns -> SynMemberDefns
......
......@@ -169,6 +169,7 @@ let parse_error_rich = Some(fun (ctxt: ParseErrorContext<_>) ->
%type <SynExpr> atomicExprAfterType
%type <SynExpr> typedSequentialExprBlock
%type <SynExpr * bool> atomicExpr
%type <SynExpr list * range list> tupleExpr
%type <SynTypeDefnSimpleRepr> tyconDefnOrSpfnSimpleRepr
%type <Choice<SynEnumCase, SynUnionCase> list> unionTypeRepr
%type <range * SynMemberDefns> tyconDefnAugmentation
......@@ -4017,14 +4018,8 @@ declExpr:
| tupleExpr %prec expr_tuple
{ let exprs, commas = $1
let exprs, commas =
// Nested non-struct tuple is only possible during error recovery,
// in other situations there are intermediate nodes.
match exprs with
| SynExpr.Tuple(false, _, _, _) :: _ -> normalizeTupleExpr exprs commas
| _ -> exprs, commas
SynExpr.Tuple(false, List.rev exprs, List.rev commas, (commas.Head, exprs) ||> unionRangeWithListBy (fun e -> e.Range)) }
let m = unionRanges exprs.Head.Range (List.last exprs).Range
SynExpr.Tuple(false, List.rev exprs, List.rev commas, m) }
| declExpr JOIN_IN declExpr
{ SynExpr.JoinIn($1, rhs parseState 2, $3, unionRanges $1.Range $3.Range) }
......@@ -4120,9 +4115,10 @@ declExpr:
{ reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2))
exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) }
| declExpr EQUALS OBLOCKEND_COMING_SOON
| declExpr EQUALS ends_coming_soon_or_recover
{ reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("="))
exprFromParseError(mkSynInfix (rhs parseState 2) $1 "=" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) }
let mEquals = rhs parseState 2
mkSynInfix mEquals $1 "=" (arbExpr ("declExprInfixEquals", mEquals.EndRange)) }
| declExpr INFIX_COMPARE_OP OBLOCKEND_COMING_SOON
{ reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2))
......@@ -4380,23 +4376,47 @@ tupleExpr:
let exprs, commas = $1
arbExpr ("tupleExpr1", commaRange.EndRange) :: exprs, commaRange :: commas }
| tupleExpr COMMA COMMA declExpr
{ let exprs, commas = $1
let mComma1 = rhs parseState 2
let mComma2 = rhs parseState 3
reportParseErrorAt mComma2 (FSComp.SR.parsExpectingExpressionInTuple ())
let expr = arbExpr ("tupleExpr2", mComma1.EndRange)
$4 :: expr :: exprs, (mComma2 :: mComma1 :: commas) }
| tupleExpr COMMA COMMA ends_coming_soon_or_recover
{ let exprs, commas = $1
let mComma1 = rhs parseState 2
let mComma2 = rhs parseState 3
reportParseErrorAt mComma2 (FSComp.SR.parsExpectingExpressionInTuple ())
if not $4 then reportParseErrorAt mComma2 (FSComp.SR.parsExpectedExpressionAfterToken ())
let expr1 = arbExpr ("tupleExpr3", mComma1.EndRange)
let expr2 = arbExpr ("tupleExpr4", mComma2.EndRange)
expr2 :: expr1 :: exprs, mComma2 :: mComma1 :: commas }
| declExpr COMMA ends_coming_soon_or_recover
{ let commaRange = rhs parseState 2
if not $3 then reportParseErrorAt commaRange (FSComp.SR.parsExpectedExpressionAfterToken ())
[arbExpr ("tupleExpr2", commaRange.EndRange); $1], [commaRange] }
[arbExpr ("tupleExpr5", commaRange.EndRange); $1], [commaRange] }
| declExpr COMMA declExpr
{ [$3; $1], [rhs parseState 2] }
| COMMA declExpr
{ let commaRange = rhs parseState 1
reportParseErrorAt commaRange (FSComp.SR.parsExpectingExpressionInTuple ())
[$2; arbExpr ("tupleExpr3", commaRange.StartRange)], [commaRange] }
| COMMA ends_coming_soon_or_recover
{ let commaRange = rhs parseState 1
if not $2 then reportParseErrorAt commaRange (FSComp.SR.parsExpectedExpressionAfterToken ())
[arbExpr ("tupleExpr4", commaRange.EndRange); arbExpr ("tupleExpr5", commaRange.StartRange)], [commaRange] }
| declExpr COMMA COMMA ends_coming_soon_or_recover
{ let mComma1 = rhs parseState 2
let mComma2 = rhs parseState 3
reportParseErrorAt mComma2 (FSComp.SR.parsExpectingExpressionInTuple ())
if not $4 then reportParseErrorAt mComma2 (FSComp.SR.parsExpectedExpressionAfterToken ())
let expr1 = arbExpr ("tupleExpr6", mComma1.EndRange)
let expr2 = arbExpr ("tupleExpr7", mComma2.EndRange)
[expr2; expr1; $1], [mComma2; mComma1] }
| declExpr COMMA COMMA declExpr
{ let mComma1 = rhs parseState 2
let mComma2 = rhs parseState 3
reportParseErrorAt mComma2 (FSComp.SR.parsExpectingExpressionInTuple ())
let expr = arbExpr ("tupleExpr8", mComma1.EndRange)
[$4; expr; $1], [mComma2; mComma1] }
minusExpr:
| INFIX_AT_HAT_OP minusExpr
......@@ -4744,6 +4764,19 @@ parenExpr:
//let mLhs = if $2 then unionRangeWithPos mLeftParen (rhs parseState 2).Start else mLeftParen
//arbExpr ("parenExpr2", mLhs) }
| LPAREN COMMA declExpr rparen
{ let mComma = rhs parseState 2
let mLparen = rhs parseState 1
let mRparen = rhs parseState 3
let errorExpr = arbExpr ("tupleExpr3", mComma.EndRange)
let mTuple = unionRanges mComma $3.Range
let tupleExpr =
match $3 with
| SynExpr.Tuple(false, exprs, commas, m) ->
SynExpr.Tuple(false, errorExpr :: exprs, mComma :: commas, mTuple)
| expr -> SynExpr.Tuple(false, [errorExpr; expr], [mComma], mTuple)
SynExpr.Paren(tupleExpr, mLparen, Some mRparen, rhs2 parseState 1 4) }
parenExprBody:
| typars COLON LPAREN classMemberSpfn rparen typedSequentialExpr
{ (fun m -> SynExpr.TraitCall($1, $4, $6, m)) } /* disambiguate: x $a.id(x) */
......
......@@ -210,119 +210,6 @@ let checkRangeCountAndOrder commas =
|> List.pairwise
|> List.iter (assertIsBefore id))
[<Test>]
let ``Expr - Tuple 01`` () =
let parseResults = getParseResults """
(,)
(,,)
(,,,)
"""
let exprs = getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr
match exprs with
| [ SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e11; SynExpr.ArbitraryAfterError _ as e12], c1, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e21; SynExpr.ArbitraryAfterError _ as e22; SynExpr.ArbitraryAfterError _ as e23], c2, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e31; SynExpr.ArbitraryAfterError _ as e32; SynExpr.ArbitraryAfterError _ as e33; SynExpr.ArbitraryAfterError _ as e34], c3, _) ] ->
[ e11; e12; e21; e22; e23; e31; e32; e33; e34 ] |> checkNodeOrder
[ c1, 1; c2, 2; c3, 3 ] |> checkRangeCountAndOrder
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 02`` () =
let parseResults = getParseResults """
(1,)
(,1)
(1,1)
"""
let exprs = getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr
match exprs with
| [ SynExpr.Tuple(_, [SynExpr.Const _ as e11; SynExpr.ArbitraryAfterError _ as e12], c1, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e21; SynExpr.Const _ as e22], c2, _)
SynExpr.Tuple(_, [SynExpr.Const _ as e31; SynExpr.Const _ as e32], c3, _) ] ->
[ e11; e12; e21; e22; e31; e32 ] |> checkNodeOrder
[ c1, 1; c2, 1; c3, 1 ] |> checkRangeCountAndOrder
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 03`` () =
let parseResults = getParseResults """
(1,,)
(,1,)
(,,1)
(1,1,)
(,1,1)
(1,,1)
(1,1,1)
"""
let exprs = getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr
match exprs with
| [ SynExpr.Tuple(_, [SynExpr.Const _ as e11; SynExpr.ArbitraryAfterError _ as e12; SynExpr.ArbitraryAfterError _ as e13], c1, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e21; SynExpr.Const _ as e22; SynExpr.ArbitraryAfterError _ as e23], c2, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e31; SynExpr.ArbitraryAfterError _ as e32; SynExpr.Const _ as e33], c3, _)
SynExpr.Tuple(_, [SynExpr.Const _ as e41; SynExpr.Const _ as e42; SynExpr.ArbitraryAfterError _ as e43], c4, _)
SynExpr.Tuple(_, [SynExpr.ArbitraryAfterError _ as e51; SynExpr.Const _ as e52; SynExpr.Const _ as e53], c5, _)
SynExpr.Tuple(_, [SynExpr.Const _ as e61; SynExpr.ArbitraryAfterError _ as e62; SynExpr.Const _ as e63], c6, _)
SynExpr.Tuple(_, [SynExpr.Const _ as e71; SynExpr.Const _ as e72; SynExpr.Const _ as e73], c7, _) ] ->
[ e11; e12; e13; e21; e22; e23; e31; e32; e33
e41; e42; e43; e51; e52; e53; e61; e62; e63
e71; e72; e73 ]
|> checkNodeOrder
[ c1, 2; c2, 2; c3, 2
c4, 2; c5, 2; c6, 2
c7, 2 ]
|> checkRangeCountAndOrder
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 04`` () =
let parseResults = getParseResults """
(,1,,2,3,,4,)
"""
let exprs = getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr
match exprs with
| [ SynExpr.Tuple(_, [ SynExpr.ArbitraryAfterError _ as e1
SynExpr.Const _ as e2
SynExpr.ArbitraryAfterError _ as e3
SynExpr.Const _ as e4
SynExpr.Const _ as e5
SynExpr.ArbitraryAfterError _ as e6
SynExpr.Const _ as e7
SynExpr.ArbitraryAfterError _ as e8 ], c, _) ] ->
[ e1; e2; e3; e4; e5; e6; e7; e8 ] |> checkNodeOrder
[ c, 7 ] |> checkRangeCountAndOrder
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 05`` () =
let parseResults = getParseResults """
(1,
"""
match getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr with
| [ SynExpr.FromParseError(SynExpr.Tuple(_, [SynExpr.Const _; SynExpr.ArbitraryAfterError _], _, _), _) ] -> ()
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 06`` () =
let parseResults = getParseResults """
(1,,,2)
"""
let synExprs = getSingleModuleMemberDecls parseResults |> List.map getSingleParenInnerExpr
match synExprs with
| [ SynExpr.Tuple(_, [ SynExpr.Const _
SynExpr.ArbitraryAfterError _
SynExpr.ArbitraryAfterError _
SynExpr.Const _ ], _, _) ] -> ()
| _ -> failwith "Unexpected tree"
[<Test>]
let ``Expr - Tuple 07`` () =
let parseResults = getParseResults """
......
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 01.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [], [Some (OriginalNotation "=")]),
None, (3,2--3,3)), Ident a, (3,0--3,3)), Ident b,
(3,0--3,5)), (3,0--3,5))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 02.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [], [Some (OriginalNotation "=")]),
None, (3,4--3,5)), Ident a, (3,2--3,5)), Ident b,
(3,2--3,7)), (3,1--3,2), Some (3,7--3,8), (3,1--3,8)),
(3,0--3,8)), (3,0--3,8))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,8), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 03.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [], [Some (OriginalNotation "=")]),
None, (3,4--3,5)), Ident a, (3,2--3,5)),
ArbitraryAfterError ("declExprInfixEquals", (3,5--3,5)),
(3,2--3,5)), (3,1--3,2), Some (3,6--3,7), (3,1--3,7)),
(3,0--3,7)), (3,0--3,7))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,4)-(3,5) parse error Unexpected token '=' or incomplete expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 04.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(Tuple
(false,
[App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,4--3,5)), Ident a, (3,2--3,5)),
Const (Int32 1, (3,6--3,7)), (3,2--3,7));
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,11--3,12)), Ident b, (3,9--3,12)),
ArbitraryAfterError
("declExprInfixEquals", (3,12--3,12)), (3,9--3,12))],
[(3,7--3,8)], (3,2--3,12)), (3,1--3,2), Some (3,12--3,13),
(3,1--3,13)), (3,0--3,13)), (3,0--3,13))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,11)-(3,12) parse error Unexpected token '=' or incomplete expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 05.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(Tuple
(false,
[App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,4--3,5)), Ident a, (3,2--3,5)),
ArbitraryAfterError
("declExprInfixEquals", (3,5--3,5)), (3,2--3,5));
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,9--3,10)), Ident b, (3,7--3,10)),
Const (Int32 2, (3,11--3,12)), (3,7--3,12))],
[(3,5--3,6)], (3,2--3,12)), (3,1--3,2), Some (3,12--3,13),
(3,1--3,13)), (3,0--3,13)), (3,0--3,13))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,13), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,5)-(3,6) parse error Unexpected symbol ',' in expression
(3,4)-(3,5) parse error Unexpected token '=' or incomplete expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 06.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(Tuple
(false,
[App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,4--3,5)), Ident a, (3,2--3,5)),
Const (Int32 1, (3,6--3,7)), (3,2--3,7));
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,11--3,12)), Ident b, (3,9--3,12)),
ArbitraryAfterError
("declExprInfixEquals", (3,12--3,12)), (3,9--3,12));
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,16--3,17)), Ident c, (3,14--3,17)),
Const (Int32 3, (3,18--3,19)), (3,14--3,19))],
[(3,7--3,8); (3,12--3,13)], (3,2--3,19)), (3,1--3,2),
Some (3,19--3,20), (3,1--3,20)), (3,0--3,20)), (3,0--3,20))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,20), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,12)-(3,13) parse error Unexpected symbol ',' in expression
(3,11)-(3,12) parse error Unexpected token '=' or incomplete expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary - Eq 07.fs", false, QualifiedNameOfFile Module,
[], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(Atomic, false, Ident M,
Paren
(Tuple
(false,
[App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,4--3,5)), Ident a, (3,2--3,5)),
Const (Int32 1, (3,6--3,7)), (3,2--3,7));
ArbitraryAfterError ("tupleExpr8", (3,8--3,8));
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Equality], [],
[Some (OriginalNotation "=")]), None,
(3,13--3,14)), Ident c, (3,11--3,14)),
Const (Int32 3, (3,15--3,16)), (3,11--3,16))],
[(3,7--3,8); (3,9--3,10)], (3,2--3,16)), (3,1--3,2),
Some (3,16--3,17), (3,1--3,17)), (3,0--3,17)), (3,0--3,17))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,17), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,9)-(3,10) parse error Expecting expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary 01.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Addition], [], [Some (OriginalNotation "+")]),
None, (3,2--3,3)), Const (Int32 1, (3,0--3,1)),
(3,0--3,3)), Const (Int32 2, (3,4--3,5)), (3,0--3,5)),
(3,0--3,5))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Binary 02.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Addition], [], [Some (OriginalNotation "+")]),
None, (3,6--3,7)),
App
(NonAtomic, false,
App
(NonAtomic, true,
LongIdent
(false,
SynLongIdent
([op_Addition], [], [Some (OriginalNotation "+")]),
None, (3,2--3,3)), Const (Int32 1, (3,0--3,1)),
(3,0--3,3)), Const (Int32 2, (3,4--3,5)), (3,0--3,5)),
(3,0--3,7)), Const (Int32 3, (3,8--3,9)), (3,0--3,9)),
(3,0--3,9))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,9), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 01.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[Ident a; ArbitraryAfterError ("tupleExpr5", (3,3--3,3))],
[(3,2--3,3)], (3,1--3,3)), (3,0--3,1), Some (3,3--3,4),
(3,0--3,4)), (3,0--3,4))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,4), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,2)-(3,3) parse error Expected an expression after this point
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 02.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[ArbitraryAfterError ("tupleExpr3", (3,2--3,2)); Ident b],
[(3,1--3,2)], (3,1--3,3)), (3,0--3,1), Some (3,2--3,3),
(3,0--3,4)), (3,0--3,4))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,4), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 03.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[ArbitraryAfterError ("tupleExpr3", (3,2--3,2)); Ident b;
Ident c], [(3,1--3,2); (3,3--3,4)], (3,1--3,5)), (3,0--3,1),
Some (3,2--3,5), (3,0--3,6)), (3,0--3,6))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 04.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[Ident a; ArbitraryAfterError ("tupleExpr8", (3,3--3,3));
Ident c], [(3,2--3,3); (3,3--3,4)], (3,1--3,5)), (3,0--3,1),
Some (3,5--3,6), (3,0--3,6)), (3,0--3,6))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,3)-(3,4) parse error Expecting expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 05.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[Ident a; Ident b;
ArbitraryAfterError ("tupleExpr1", (3,5--3,5))],
[(3,2--3,3); (3,4--3,5)], (3,1--3,5)), (3,0--3,1),
Some (3,5--3,6), (3,0--3,6)), (3,0--3,6))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,6), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,4)-(3,5) parse error Expected an expression after this point
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 06.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Tuple
(false,
[ArbitraryAfterError ("parenExpr2", (3,0--3,3)); Ident c],
[(3,2--3,3)], (3,0--3,4)), (3,0--3,4))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,4), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,2)-(3,3) parse error Unexpected symbol ',' in expression
(3,0)-(3,1) parse error Unmatched '('
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 07.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[Ident a; ArbitraryAfterError ("tupleExpr8", (3,3--3,3));
Ident c; ArbitraryAfterError ("tupleExpr2", (3,6--3,6));
Ident e; ArbitraryAfterError ("tupleExpr1", (3,9--3,9))],
[(3,2--3,3); (3,3--3,4); (3,5--3,6); (3,6--3,7); (3,8--3,9)],
(3,1--3,9)), (3,0--3,1), Some (3,9--3,10), (3,0--3,10)),
(3,0--3,10))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,3)-(3,4) parse error Expecting expression
(3,6)-(3,7) parse error Expecting expression
(3,8)-(3,9) parse error Expected an expression after this point
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 08.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(FromParseError
(Tuple
(false,
[Const (Int32 1, (3,1--3,2));
ArbitraryAfterError ("tupleExpr5", (3,3--3,3))],
[(3,2--3,3)], (3,1--3,3)), (3,1--3,3)), (3,0--3,1), None,
(3,0--4,0)), (3,0--4,0))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--4,0), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(4,0)-(4,0) parse warning Possible incorrect indentation: this token is offside of context started at position (1:1). Try indenting this token further or using standard formatting conventions.
(3,2)-(3,3) parse error Expected an expression after this point
(3,0)-(3,1) parse error Unmatched '('
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 09.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false,
[Const (Int32 1, (3,1--3,2));
ArbitraryAfterError ("tupleExpr6", (3,3--3,3));
ArbitraryAfterError ("tupleExpr7", (3,4--3,4));
Const (Int32 2, (3,5--3,6))],
[(3,2--3,3); (3,3--3,4); (3,4--3,5)], (3,1--3,6)),
(3,0--3,1), Some (3,6--3,7), (3,0--3,7)), (3,0--3,7))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,4)-(3,5) parse error Unexpected symbol ',' in expression
(3,3)-(3,4) parse error Expecting expression
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 10.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Let
(false,
[SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(None, SynValInfo ([], SynArgInfo ([], false, None)), None),
Named (SynIdent (x, None), false, None, (3,4--3,5)), None,
Tuple
(false,
[Const (Int32 1, (3,8--3,9));
ArbitraryAfterError ("tupleExpr5", (3,10--3,10))],
[(3,9--3,10)], (3,8--3,10)), (3,4--3,5), Yes (3,0--3,10),
{ LeadingKeyword = Let (3,0--3,3)
InlineKeyword = None
EqualsRange = Some (3,6--3,7) })], (3,0--3,10))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,10), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(4,0)-(4,0) parse warning Possible incorrect indentation: this token is offside of context started at position (3:9). Try indenting this token further or using standard formatting conventions.
(3,9)-(3,10) parse error Expected an expression after this point
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple - Missing item 11.fs", false,
QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Let
(false,
[SynBinding
(None, Normal, false, false, [],
PreXmlDoc ((3,0), FSharp.Compiler.Xml.XmlDocCollector),
SynValData
(None, SynValInfo ([], SynArgInfo ([], false, None)), None),
Named (SynIdent (x, None), false, None, (3,4--3,5)), None,
ArbitraryAfterError ("localBinding1", (3,7--3,7)), (3,4--3,5),
Yes (3,4--3,7), { LeadingKeyword = Let (3,0--3,3)
InlineKeyword = None
EqualsRange = Some (3,6--3,7) })],
(3,0--3,7))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
(3,8)-(3,9) parse error Unexpected symbol ',' in binding
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple 01.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple (false, [Ident a; Ident b], [(3,2--3,3)], (3,1--3,4)),
(3,0--3,1), Some (3,4--3,5), (3,0--3,5)), (3,0--3,5))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
ImplFile
(ParsedImplFileInput
("/root/Expression/Tuple 02.fs", false, QualifiedNameOfFile Module, [], [],
[SynModuleOrNamespace
([Module], false, NamedModule,
[Expr
(Paren
(Tuple
(false, [Ident a; Ident b; Ident c], [(3,2--3,3); (3,4--3,5)],
(3,1--3,6)), (3,0--3,1), Some (3,6--3,7), (3,0--3,7)),
(3,0--3,7))],
PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None,
(1,0--3,7), { LeadingKeyword = Module (1,0--1,6) })], (true, true),
{ ConditionalDirectives = []
CodeComments = [] }, set []))
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册