diff --git a/src/Compiler/pars.fsy b/src/Compiler/pars.fsy index 3d460406c80..4d7f77d6e73 100644 --- a/src/Compiler/pars.fsy +++ b/src/Compiler/pars.fsy @@ -4024,151 +4024,168 @@ declExpr: | declExpr JOIN_IN declExpr { SynExpr.JoinIn($1, rhs parseState 2, $3, unionRanges $1.Range $3.Range) } + | declExpr JOIN_IN ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "in") + mkSynInfix mOp $1 "@in" (arbExpr ("declExprInfixJoinIn", mOp.EndRange)) } + | declExpr BAR_BAR declExpr { mkSynInfix (rhs parseState 2) $1 "||" $3 } + | declExpr BAR_BAR ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "||") + mkSynInfix mOp $1 "||" (arbExpr ("declExprInfixBarBar", mOp.EndRange)) } + | declExpr INFIX_BAR_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr INFIX_BAR_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixBarOp", mOp.EndRange)) } + | declExpr OR declExpr { mkSynInfix (rhs parseState 2) $1 "or" $3 } + | declExpr OR ends_coming_soon_or_recover + { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression "or") + mkSynInfix (rhs parseState 2) $1 "or" (arbExpr ("declExprInfixOr", (rhs parseState 3).StartRange)) } + | declExpr AMP declExpr { mkSynInfix (rhs parseState 2) $1 "&" $3 } + | declExpr AMP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "&") + mkSynInfix mOp $1 "&" (arbExpr ("declExprInfixAmp", mOp.EndRange)) } + | declExpr AMP_AMP declExpr { mkSynInfix (rhs parseState 2) $1 "&&" $3 } + | declExpr AMP_AMP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "&&") + mkSynInfix mOp $1 "&&" (arbExpr ("declExprInfixAmpAmp", mOp.EndRange)) } + | declExpr INFIX_AMP_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr INFIX_AMP_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixAmpOp", (rhs parseState 3).StartRange)) } + | declExpr EQUALS declExpr { mkSynInfix (rhs parseState 2) $1 "=" $3 } + | declExpr EQUALS ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "=") + mkSynInfix mOp $1 "=" (arbExpr ("declExprInfixEquals", mOp.EndRange)) } + | declExpr INFIX_COMPARE_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr INFIX_COMPARE_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfix", mOp.EndRange)) } + | declExpr DOLLAR declExpr { mkSynInfix (rhs parseState 2) $1 "$" $3 } + | declExpr DOLLAR ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "$") + mkSynInfix mOp $1 "$" (arbExpr ("declExprInfixDollar", mOp.EndRange)) } + | declExpr LESS declExpr { mkSynInfix (rhs parseState 2) $1 "<" $3 } - | declExpr LESS recover - { if not $3 then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")) - exprFromParseError (mkSynInfix (rhs parseState 2) $1 "<" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } + | declExpr LESS ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "<") + mkSynInfix mOp $1 "<" (arbExpr ("declExprInfixLess", mOp.EndRange)) } | declExpr GREATER declExpr { mkSynInfix (rhs parseState 2) $1 ">" $3 } + | declExpr GREATER ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression ">") + mkSynInfix mOp $1 ">" (arbExpr ("declExprInfixGreater", mOp.EndRange)) } + | declExpr INFIX_AT_HAT_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr INFIX_AT_HAT_OP ends_coming_soon_or_recover %prec infix_at_hat_op_binary + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfix", mOp.EndRange)) } + | declExpr PERCENT_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr PERCENT_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixPercent", mOp.EndRange)) } + | declExpr COLON_COLON declExpr - { let tupExpr = SynExpr.Tuple(false, [$1;$3], [rhs parseState 2], unionRanges $1.Range $3.Range) - let identExpr = mkSynOperator (rhs parseState 2) "::" - SynExpr.App(ExprAtomicFlag.NonAtomic, true, identExpr, tupExpr, unionRanges $1.Range $3.Range) } + { let mOp = rhs parseState 2 + let m = unionRanges $1.Range $3.Range + let tupExpr = SynExpr.Tuple(false, [$1; $3], [mOp], m) + let identExpr = mkSynOperator mOp "::" + SynExpr.App(ExprAtomicFlag.NonAtomic, true, identExpr, tupExpr, m) } + + | declExpr COLON_COLON ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + let m = unionRanges $1.Range mOp + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "::") + let identExpr = mkSynOperator mOp "::" + let tupExpr = SynExpr.Tuple(false, [$1; (arbExpr ("declExprInfixColonColon", mOp.EndRange))], [mOp], m) + SynExpr.App(ExprAtomicFlag.NonAtomic, true, identExpr, tupExpr, m) } | declExpr PLUS_MINUS_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr PLUS_MINUS_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixPlusMinus", mOp.EndRange)) } + | declExpr MINUS declExpr { mkSynInfix (rhs parseState 2) $1 "-" $3 } + | declExpr MINUS ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "-") + mkSynInfix mOp $1 "-" (arbExpr ("declExprInfixMinus", mOp.EndRange)) } + | declExpr STAR declExpr { mkSynInfix (rhs parseState 2) $1 "*" $3 } + | declExpr STAR ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression "*") + mkSynInfix mOp $1 "*" (arbExpr ("declExprInfixStar", mOp.EndRange)) } + | declExpr INFIX_STAR_DIV_MOD_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } + | declExpr INFIX_STAR_DIV_MOD_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixStarDivMod", mOp.EndRange)) } + | declExpr INFIX_STAR_STAR_OP declExpr { mkSynInfix (rhs parseState 2) $1 $2 $3 } - | declExpr JOIN_IN OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("in")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "@in" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr BAR_BAR OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("||")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "||" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr INFIX_BAR_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr OR OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("or")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "or" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr AMP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "&" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr AMP_AMP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("&&")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "&&" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr INFIX_AMP_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr EQUALS ends_coming_soon_or_recover - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("=")) - 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)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr DOLLAR OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("$")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "$" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr LESS OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("<")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "<" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr GREATER OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression(">")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 ">" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr INFIX_AT_HAT_OP OBLOCKEND_COMING_SOON %prec infix_at_hat_op_binary - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr PERCENT_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr COLON_COLON OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("::")) - let identExpr = mkSynOperator (rhs parseState 2) "::" - let tupExpr = SynExpr.Tuple(false, [$1;(arbExpr ("declExprInfix", (rhs parseState 3).StartRange))], [rhs parseState 2], unionRanges $1.Range (rhs parseState 3).StartRange) - SynExpr.App(ExprAtomicFlag.NonAtomic, true, identExpr, tupExpr, unionRanges $1.Range (rhs parseState 3).StartRange) } - - | declExpr PLUS_MINUS_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr MINUS OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("-")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "-" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr STAR OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression("*")) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 "*" (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr INFIX_STAR_DIV_MOD_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } - - | declExpr INFIX_STAR_STAR_OP OBLOCKEND_COMING_SOON - { reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnfinishedExpression($2)) - exprFromParseError(mkSynInfix (rhs parseState 2) $1 $2 (arbExpr ("declExprInfix", (rhs parseState 3).StartRange))) } + | declExpr INFIX_STAR_STAR_OP ends_coming_soon_or_recover + { let mOp = rhs parseState 2 + reportParseErrorAt mOp (FSComp.SR.parsUnfinishedExpression $2) + mkSynInfix mOp $1 $2 (arbExpr ("declExprInfixStarStar", mOp.EndRange)) } | declExpr DOT_DOT declExpr { let wholem = rhs2 parseState 1 3 diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_ocamlstyle_nested007.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_ocamlstyle_nested007.fs index 58eec6d18dd..e6a5da22510 100644 --- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_ocamlstyle_nested007.fs +++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/Comments/E_ocamlstyle_nested007.fs @@ -4,8 +4,8 @@ // Since OCaml-style comments are now gone, this is going to be a negative test //Unexpected string literal in binding\. Expected incomplete structured construct at or before this point or other token\.$ //Incomplete value or function definition\. If this is in an expression, the body of the expression must be indented to the same column as the 'let' keyword\.$ -//Incomplete structured construct at or before this point in implementation file$ - +//Unexpected token '\*' or incomplete expression +//Unexpected symbol '\)' in implementation file let y7a = (** This is a comment with "(***)" *) 1 (**) + 2" diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_IncompleteParens02.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_IncompleteParens02.fs index 489be541f65..f274899099c 100644 --- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_IncompleteParens02.fs +++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_IncompleteParens02.fs @@ -1,7 +1,8 @@ // #Regression #Conformance #UnitsOfMeasure // Regression test for FSHARP1.0:2662 // Make sure we can use ( and ) in Units of Measure -//Unexpected symbol '\)' in expression$ +//Unexpected symbol '\)' in binding\. Expected incomplete structured construct at or before this point or other token\. +//Unexpected token '/' or incomplete expression [] type Kg [] type m diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs b/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs new file mode 100644 index 00000000000..de89a9f3a1b --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs @@ -0,0 +1,3 @@ +module Module + +a + b diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs.bsl b/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs.bsl new file mode 100644 index 00000000000..748e99e38be --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 01.fs.bsl @@ -0,0 +1,21 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Binary - Plus 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)), 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 [])) diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs b/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs new file mode 100644 index 00000000000..b1b740f0037 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs @@ -0,0 +1,3 @@ +module Module + +a + diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs.bsl b/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs.bsl new file mode 100644 index 00000000000..6f28e14086a --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 02.fs.bsl @@ -0,0 +1,25 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Binary - Plus 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,2--3,3)), Ident a, (3,0--3,3)), + ArbitraryAfterError ("declExprInfixPlusMinus", (3,3--3,3)), + (3,0--3,3)), (3,0--3,3))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--3,3), { 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:1). Try indenting this token further or using standard formatting conventions. +(3,2)-(3,3) parse error Unexpected token '+' or incomplete expression diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs b/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs new file mode 100644 index 00000000000..0cbbb5bd6e5 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs @@ -0,0 +1,3 @@ +module Module + +M(a + ) diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs.bsl b/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs.bsl new file mode 100644 index 00000000000..95babc117f7 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 03.fs.bsl @@ -0,0 +1,29 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Binary - Plus 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_Addition], [], [Some (OriginalNotation "+")]), + None, (3,4--3,5)), Ident a, (3,2--3,5)), + ArbitraryAfterError + ("declExprInfixPlusMinus", (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 diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs b/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs new file mode 100644 index 00000000000..3e57231ea1e --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs @@ -0,0 +1,4 @@ +module Module + +a + +|> () diff --git a/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs.bsl b/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs.bsl new file mode 100644 index 00000000000..8f5d5280bb7 --- /dev/null +++ b/tests/service/data/SyntaxTree/Expression/Binary - Plus 04.fs.bsl @@ -0,0 +1,36 @@ +ImplFile + (ParsedImplFileInput + ("/root/Expression/Binary - Plus 04.fs", false, QualifiedNameOfFile Module, + [], [], + [SynModuleOrNamespace + ([Module], false, NamedModule, + [Expr + (App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_PipeRight], [], [Some (OriginalNotation "|>")]), + None, (4,0--4,2)), + App + (NonAtomic, false, + App + (NonAtomic, true, + LongIdent + (false, + SynLongIdent + ([op_Addition], [], [Some (OriginalNotation "+")]), + None, (3,2--3,3)), Ident a, (3,0--3,3)), + ArbitraryAfterError + ("declExprInfixPlusMinus", (3,3--3,3)), (3,0--3,3)), + (3,0--4,2)), Const (Unit, (4,3--4,5)), (3,0--4,5)), + (3,0--4,5))], + PreXmlDoc ((1,0), FSharp.Compiler.Xml.XmlDocCollector), [], None, + (1,0--4,5), { LeadingKeyword = Module (1,0--1,6) })], (true, true), + { ConditionalDirectives = [] + CodeComments = [] }, set [])) + +(4,0)-(4,2) parse error Unexpected infix operator in expression +(3,2)-(3,3) parse error Unexpected token '+' or incomplete expression