From a818c7f0595ddc35fd9218cbb2e69a4dc44a5cec Mon Sep 17 00:00:00 2001 From: rzvxa <rzvxa@protonmail.com> Date: Fri, 8 Mar 2024 22:06:39 +0330 Subject: [PATCH] test(parser): add assignment operator to binarty operator tests. --- .../cases/pass/binary-operator-01/ast.snap | 33 +++-- .../cases/pass/binary-operator-01/case.fuse | 2 +- .../cases/pass/binary-operator-01/tokens.snap | 48 +++++++- .../cases/pass/binary-operator-02/ast.snap | 61 ++++++---- .../cases/pass/binary-operator-02/case.fuse | 2 +- .../cases/pass/binary-operator-02/tokens.snap | 60 ++++++++-- .../cases/pass/binary-operator-03/ast.snap | 63 ++++++---- .../cases/pass/binary-operator-03/case.fuse | 2 +- .../cases/pass/binary-operator-03/tokens.snap | 64 ++++++++-- .../cases/pass/binary-operator-04/ast.snap | 113 ++++++++++-------- .../cases/pass/binary-operator-04/case.fuse | 2 +- .../cases/pass/binary-operator-04/tokens.snap | 50 +++++++- .../cases/pass/binary-operator-05/ast.snap | 111 +++++++++-------- .../cases/pass/binary-operator-05/case.fuse | 2 +- .../cases/pass/binary-operator-05/tokens.snap | 62 ++++++++-- .../cases/pass/binary-operator-06/ast.snap | 89 ++++++++------ .../cases/pass/binary-operator-06/case.fuse | 2 +- .../cases/pass/binary-operator-06/tokens.snap | 68 ++++++++--- .../cases/pass/binary-operator-07/ast.snap | 53 ++++---- .../cases/pass/binary-operator-07/case.fuse | 2 +- .../cases/pass/binary-operator-07/tokens.snap | 64 ++++++++-- 21 files changed, 655 insertions(+), 298 deletions(-) diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-01/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-01/ast.snap index ccdcd11..961f43e 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-01/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-01/ast.snap @@ -1,34 +1,47 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b\n" +description: "x = a and b\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 8, + end: 12, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: LogicalAnd(Span( + kind: Assignment(Span( start: 2, - end: 5, + end: 3, )), lhs: Identifier(Identifier( span: Span( start: 0, end: 1, ), - name: Atom("a"), + name: Atom("x"), )), - rhs: Identifier(Identifier( - span: Span( + rhs: BinaryOperator(BinaryOperator( + kind: LogicalAnd(Span( start: 6, - end: 7, - ), - name: Atom("b"), + end: 9, + )), + lhs: Identifier(Identifier( + span: Span( + start: 4, + end: 5, + ), + name: Atom("a"), + )), + rhs: Identifier(Identifier( + span: Span( + start: 10, + end: 11, + ), + name: Atom("b"), + )), )), ))), ], diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse index 1dc60c7..19057fe 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse @@ -1 +1 @@ -a and b +x = a and b diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-01/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-01/tokens.snap index e51b7ba..19f172a 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-01/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-01/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b\n" +description: "x = a and b\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse --- @@ -28,9 +28,28 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse token: Token( span: Span( start: 2, + end: 3, + ), + kind: Eq, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 3, + end: 4, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 4, end: 5, ), - kind: And, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -47,7 +66,26 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse token: Token( span: Span( start: 6, - end: 7, + end: 9, + ), + kind: And, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 9, + end: 10, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 10, + end: 11, ), kind: Identifier, ), @@ -55,8 +93,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-01/case.fuse trailing_trivia: [ Token( span: Span( - start: 7, - end: 8, + start: 11, + end: 12, ), kind: Whitespace, ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-02/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-02/ast.snap index 21e0d29..70571b5 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-02/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-02/ast.snap @@ -1,48 +1,61 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b and c\n" +description: "x = a and b and c\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 14, + end: 18, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: LogicalAnd(Span( - start: 8, - end: 11, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: BinaryOperator(BinaryOperator( + lhs: Identifier(Identifier( + span: Span( + start: 0, + end: 1, + ), + name: Atom("x"), + )), + rhs: BinaryOperator(BinaryOperator( kind: LogicalAnd(Span( - start: 2, - end: 5, + start: 12, + end: 15, )), - lhs: Identifier(Identifier( - span: Span( - start: 0, - end: 1, - ), - name: Atom("a"), + lhs: BinaryOperator(BinaryOperator( + kind: LogicalAnd(Span( + start: 6, + end: 9, + )), + lhs: Identifier(Identifier( + span: Span( + start: 4, + end: 5, + ), + name: Atom("a"), + )), + rhs: Identifier(Identifier( + span: Span( + start: 10, + end: 11, + ), + name: Atom("b"), + )), )), rhs: Identifier(Identifier( span: Span( - start: 6, - end: 7, + start: 16, + end: 17, ), - name: Atom("b"), + name: Atom("c"), )), )), - rhs: Identifier(Identifier( - span: Span( - start: 12, - end: 13, - ), - name: Atom("c"), - )), ))), ], ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse index b512cae..08a9d0a 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse @@ -1 +1 @@ -a and b and c +x = a and b and c diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-02/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-02/tokens.snap index 5787564..b1fa652 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-02/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-02/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b and c\n" +description: "x = a and b and c\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse --- @@ -28,9 +28,28 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse token: Token( span: Span( start: 2, + end: 3, + ), + kind: Eq, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 3, + end: 4, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 4, end: 5, ), - kind: And, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -47,16 +66,16 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse token: Token( span: Span( start: 6, - end: 7, + end: 9, ), - kind: Identifier, + kind: And, ), leading_trivia: [], trailing_trivia: [ Token( span: Span( - start: 7, - end: 8, + start: 9, + end: 10, ), kind: Whitespace, ), @@ -65,10 +84,10 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse TokenReference( token: Token( span: Span( - start: 8, + start: 10, end: 11, ), - kind: And, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -85,7 +104,26 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse token: Token( span: Span( start: 12, - end: 13, + end: 15, + ), + kind: And, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 15, + end: 16, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 16, + end: 17, ), kind: Identifier, ), @@ -93,8 +131,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-02/case.fuse trailing_trivia: [ Token( span: Span( - start: 13, - end: 14, + start: 17, + end: 18, ), kind: Whitespace, ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-03/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-03/ast.snap index 1e279d8..7b9b849 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-03/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-03/ast.snap @@ -1,48 +1,61 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b or c\n" +description: "x = a and b or c\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 13, + end: 17, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: LogicalOr(Span( - start: 8, - end: 10, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: BinaryOperator(BinaryOperator( - kind: LogicalAnd(Span( - start: 2, - end: 5, + lhs: Identifier(Identifier( + span: Span( + start: 0, + end: 1, + ), + name: Atom("x"), + )), + rhs: BinaryOperator(BinaryOperator( + kind: LogicalOr(Span( + start: 12, + end: 14, )), - lhs: Identifier(Identifier( - span: Span( - start: 0, - end: 1, - ), - name: Atom("a"), + lhs: BinaryOperator(BinaryOperator( + kind: LogicalAnd(Span( + start: 6, + end: 9, + )), + lhs: Identifier(Identifier( + span: Span( + start: 4, + end: 5, + ), + name: Atom("a"), + )), + rhs: Identifier(Identifier( + span: Span( + start: 10, + end: 11, + ), + name: Atom("b"), + )), )), rhs: Identifier(Identifier( span: Span( - start: 6, - end: 7, + start: 15, + end: 16, ), - name: Atom("b"), + name: Atom("c"), )), )), - rhs: Identifier(Identifier( - span: Span( - start: 11, - end: 12, - ), - name: Atom("c"), - )), ))), ], ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse index 7750dc6..6bd64cd 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse @@ -1 +1 @@ -a and b or c +x = a and b or c diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-03/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-03/tokens.snap index e566d90..a9f3f3e 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-03/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-03/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "a and b or c\n" +description: "x = a and b or c\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse --- @@ -28,9 +28,28 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse token: Token( span: Span( start: 2, + end: 3, + ), + kind: Eq, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 3, + end: 4, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 4, end: 5, ), - kind: And, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -47,7 +66,26 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse token: Token( span: Span( start: 6, - end: 7, + end: 9, + ), + kind: And, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 9, + end: 10, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 10, + end: 11, ), kind: Identifier, ), @@ -55,8 +93,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse trailing_trivia: [ Token( span: Span( - start: 7, - end: 8, + start: 11, + end: 12, ), kind: Whitespace, ), @@ -65,8 +103,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse TokenReference( token: Token( span: Span( - start: 8, - end: 10, + start: 12, + end: 14, ), kind: Or, ), @@ -74,8 +112,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse trailing_trivia: [ Token( span: Span( - start: 10, - end: 11, + start: 14, + end: 15, ), kind: Whitespace, ), @@ -84,8 +122,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse TokenReference( token: Token( span: Span( - start: 11, - end: 12, + start: 15, + end: 16, ), kind: Identifier, ), @@ -93,8 +131,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-03/case.fuse trailing_trivia: [ Token( span: Span( - start: 12, - end: 13, + start: 16, + end: 17, ), kind: Whitespace, ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-04/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-04/ast.snap index b6696e2..a130e21 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-04/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-04/ast.snap @@ -1,37 +1,35 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "1 + 2 * 3 - 4 / 5\n" +description: "x = 1 + 2 * 3 - 4 / 5\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 18, + end: 22, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: Minus(Span( - start: 10, - end: 11, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: BinaryOperator(BinaryOperator( - kind: Plus(Span( - start: 2, - end: 3, - )), - lhs: NumberLiteral(NumberLiteral( - span: Span( - start: 0, - end: 1, - ), - raw: Atom("1"), - value: 1.0, - kind: Decimal, + lhs: Identifier(Identifier( + span: Span( + start: 0, + end: 1, + ), + name: Atom("x"), + )), + rhs: BinaryOperator(BinaryOperator( + kind: Minus(Span( + start: 14, + end: 15, )), - rhs: BinaryOperator(BinaryOperator( - kind: Multiply(Span( + lhs: BinaryOperator(BinaryOperator( + kind: Plus(Span( start: 6, end: 7, )), @@ -40,45 +38,60 @@ Some(Chunk( start: 4, end: 5, ), - raw: Atom("2"), - value: 2.0, + raw: Atom("1"), + value: 1.0, + kind: Decimal, + )), + rhs: BinaryOperator(BinaryOperator( + kind: Multiply(Span( + start: 10, + end: 11, + )), + lhs: NumberLiteral(NumberLiteral( + span: Span( + start: 8, + end: 9, + ), + raw: Atom("2"), + value: 2.0, + kind: Decimal, + )), + rhs: NumberLiteral(NumberLiteral( + span: Span( + start: 12, + end: 13, + ), + raw: Atom("3"), + value: 3.0, + kind: Decimal, + )), + )), + )), + rhs: BinaryOperator(BinaryOperator( + kind: Division(Span( + start: 18, + end: 19, + )), + lhs: NumberLiteral(NumberLiteral( + span: Span( + start: 16, + end: 17, + ), + raw: Atom("4"), + value: 4.0, kind: Decimal, )), rhs: NumberLiteral(NumberLiteral( span: Span( - start: 8, - end: 9, + start: 20, + end: 21, ), - raw: Atom("3"), - value: 3.0, + raw: Atom("5"), + value: 5.0, kind: Decimal, )), )), )), - rhs: BinaryOperator(BinaryOperator( - kind: Division(Span( - start: 14, - end: 15, - )), - lhs: NumberLiteral(NumberLiteral( - span: Span( - start: 12, - end: 13, - ), - raw: Atom("4"), - value: 4.0, - kind: Decimal, - )), - rhs: NumberLiteral(NumberLiteral( - span: Span( - start: 16, - end: 17, - ), - raw: Atom("5"), - value: 5.0, - kind: Decimal, - )), - )), ))), ], ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse index ecf3b44..89846fb 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse @@ -1 +1 @@ -1 + 2 * 3 - 4 / 5 +x = 1 + 2 * 3 - 4 / 5 diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-04/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-04/tokens.snap index f5562be..9553289 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-04/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-04/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "1 + 2 * 3 - 4 / 5\n" +description: "x = 1 + 2 * 3 - 4 / 5\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse --- @@ -11,7 +11,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse start: 0, end: 1, ), - kind: NumberLiteral, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -30,7 +30,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse start: 2, end: 3, ), - kind: Plus, + kind: Eq, ), leading_trivia: [], trailing_trivia: [ @@ -68,7 +68,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse start: 6, end: 7, ), - kind: Star, + kind: Plus, ), leading_trivia: [], trailing_trivia: [ @@ -106,7 +106,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse start: 10, end: 11, ), - kind: Minus, + kind: Star, ), leading_trivia: [], trailing_trivia: [ @@ -144,7 +144,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse start: 14, end: 15, ), - kind: Slash, + kind: Minus, ), leading_trivia: [], trailing_trivia: [ @@ -176,4 +176,42 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-04/case.fuse ), ], ), + TokenReference( + token: Token( + span: Span( + start: 18, + end: 19, + ), + kind: Slash, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 19, + end: 20, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 20, + end: 21, + ), + kind: NumberLiteral, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 21, + end: 22, + ), + kind: Whitespace, + ), + ], + ), ] diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-05/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-05/ast.snap index 7315970..a763744 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-05/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-05/ast.snap @@ -1,81 +1,94 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "1 + 2 < 3 + 4 // 5\n" +description: "x = 1 + 2 < 3 + 4 // 5\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 19, + end: 23, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: LessThan(Span( - start: 6, - end: 7, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: BinaryOperator(BinaryOperator( - kind: Plus(Span( - start: 2, - end: 3, - )), - lhs: NumberLiteral(NumberLiteral( - span: Span( - start: 0, - end: 1, - ), - raw: Atom("1"), - value: 1.0, - kind: Decimal, - )), - rhs: NumberLiteral(NumberLiteral( - span: Span( - start: 4, - end: 5, - ), - raw: Atom("2"), - value: 2.0, - kind: Decimal, - )), + lhs: Identifier(Identifier( + span: Span( + start: 0, + end: 1, + ), + name: Atom("x"), )), rhs: BinaryOperator(BinaryOperator( - kind: Plus(Span( + kind: LessThan(Span( start: 10, end: 11, )), - lhs: NumberLiteral(NumberLiteral( - span: Span( - start: 8, - end: 9, - ), - raw: Atom("3"), - value: 3.0, - kind: Decimal, + lhs: BinaryOperator(BinaryOperator( + kind: Plus(Span( + start: 6, + end: 7, + )), + lhs: NumberLiteral(NumberLiteral( + span: Span( + start: 4, + end: 5, + ), + raw: Atom("1"), + value: 1.0, + kind: Decimal, + )), + rhs: NumberLiteral(NumberLiteral( + span: Span( + start: 8, + end: 9, + ), + raw: Atom("2"), + value: 2.0, + kind: Decimal, + )), )), rhs: BinaryOperator(BinaryOperator( - kind: FloorDivision(Span( + kind: Plus(Span( start: 14, - end: 16, + end: 15, )), lhs: NumberLiteral(NumberLiteral( span: Span( start: 12, end: 13, ), - raw: Atom("4"), - value: 4.0, + raw: Atom("3"), + value: 3.0, kind: Decimal, )), - rhs: NumberLiteral(NumberLiteral( - span: Span( - start: 17, - end: 18, - ), - raw: Atom("5"), - value: 5.0, - kind: Decimal, + rhs: BinaryOperator(BinaryOperator( + kind: FloorDivision(Span( + start: 18, + end: 20, + )), + lhs: NumberLiteral(NumberLiteral( + span: Span( + start: 16, + end: 17, + ), + raw: Atom("4"), + value: 4.0, + kind: Decimal, + )), + rhs: NumberLiteral(NumberLiteral( + span: Span( + start: 21, + end: 22, + ), + raw: Atom("5"), + value: 5.0, + kind: Decimal, + )), )), )), )), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse index 05569f7..185526a 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse @@ -1 +1 @@ -1 + 2 < 3 + 4 // 5 +x = 1 + 2 < 3 + 4 // 5 diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-05/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-05/tokens.snap index f6d3815..8db72ee 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-05/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-05/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "1 + 2 < 3 + 4 // 5\n" +description: "x = 1 + 2 < 3 + 4 // 5\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse --- @@ -11,7 +11,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse start: 0, end: 1, ), - kind: NumberLiteral, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -30,7 +30,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse start: 2, end: 3, ), - kind: Plus, + kind: Eq, ), leading_trivia: [], trailing_trivia: [ @@ -68,7 +68,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse start: 6, end: 7, ), - kind: LAngle, + kind: Plus, ), leading_trivia: [], trailing_trivia: [ @@ -106,7 +106,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse start: 10, end: 11, ), - kind: Plus, + kind: LAngle, ), leading_trivia: [], trailing_trivia: [ @@ -142,7 +142,45 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse token: Token( span: Span( start: 14, - end: 16, + end: 15, + ), + kind: Plus, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 15, + end: 16, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 16, + end: 17, + ), + kind: NumberLiteral, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 17, + end: 18, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 18, + end: 20, ), kind: Slash2, ), @@ -150,8 +188,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse trailing_trivia: [ Token( span: Span( - start: 16, - end: 17, + start: 20, + end: 21, ), kind: Whitespace, ), @@ -160,8 +198,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse TokenReference( token: Token( span: Span( - start: 17, - end: 18, + start: 21, + end: 22, ), kind: NumberLiteral, ), @@ -169,8 +207,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-05/case.fuse trailing_trivia: [ Token( span: Span( - start: 18, - end: 19, + start: 22, + end: 23, ), kind: Whitespace, ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-06/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-06/ast.snap index 7992038..6a8bacf 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-06/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-06/ast.snap @@ -1,59 +1,72 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "x < max and x >= min\n" +description: "x = x < max and x >= min\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 21, + end: 25, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: LogicalAnd(Span( - start: 8, - end: 11, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: BinaryOperator(BinaryOperator( - kind: LessThan(Span( - start: 2, - end: 3, - )), - lhs: Identifier(Identifier( - span: Span( - start: 0, - end: 1, - ), - name: Atom("x"), - )), - rhs: Identifier(Identifier( - span: Span( - start: 4, - end: 7, - ), - name: Atom("max"), - )), + lhs: Identifier(Identifier( + span: Span( + start: 0, + end: 1, + ), + name: Atom("x"), )), rhs: BinaryOperator(BinaryOperator( - kind: GreaterThanEqual(Span( - start: 14, - end: 16, + kind: LogicalAnd(Span( + start: 12, + end: 15, )), - lhs: Identifier(Identifier( - span: Span( - start: 12, - end: 13, - ), - name: Atom("x"), + lhs: BinaryOperator(BinaryOperator( + kind: LessThan(Span( + start: 6, + end: 7, + )), + lhs: Identifier(Identifier( + span: Span( + start: 4, + end: 5, + ), + name: Atom("x"), + )), + rhs: Identifier(Identifier( + span: Span( + start: 8, + end: 11, + ), + name: Atom("max"), + )), )), - rhs: Identifier(Identifier( - span: Span( - start: 17, + rhs: BinaryOperator(BinaryOperator( + kind: GreaterThanEqual(Span( + start: 18, end: 20, - ), - name: Atom("min"), + )), + lhs: Identifier(Identifier( + span: Span( + start: 16, + end: 17, + ), + name: Atom("x"), + )), + rhs: Identifier(Identifier( + span: Span( + start: 21, + end: 24, + ), + name: Atom("min"), + )), )), )), ))), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse index 016fb0c..7a1c807 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse @@ -1 +1 @@ -x < max and x >= min +x = x < max and x >= min diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-06/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-06/tokens.snap index 1b4bb2a..8b0750c 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-06/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-06/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "x < max and x >= min\n" +description: "x = x < max and x >= min\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse --- @@ -30,7 +30,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse start: 2, end: 3, ), - kind: LAngle, + kind: Eq, ), leading_trivia: [], trailing_trivia: [ @@ -47,11 +47,30 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse token: Token( span: Span( start: 4, - end: 7, + end: 5, ), kind: Identifier, ), leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 5, + end: 6, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 6, + end: 7, + ), + kind: LAngle, + ), + leading_trivia: [], trailing_trivia: [ Token( span: Span( @@ -68,7 +87,7 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse start: 8, end: 11, ), - kind: And, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ @@ -85,16 +104,16 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse token: Token( span: Span( start: 12, - end: 13, + end: 15, ), - kind: Identifier, + kind: And, ), leading_trivia: [], trailing_trivia: [ Token( span: Span( - start: 13, - end: 14, + start: 15, + end: 16, ), kind: Whitespace, ), @@ -103,17 +122,17 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse TokenReference( token: Token( span: Span( - start: 14, - end: 16, + start: 16, + end: 17, ), - kind: GtEq, + kind: Identifier, ), leading_trivia: [], trailing_trivia: [ Token( span: Span( - start: 16, - end: 17, + start: 17, + end: 18, ), kind: Whitespace, ), @@ -122,10 +141,10 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse TokenReference( token: Token( span: Span( - start: 17, + start: 18, end: 20, ), - kind: Identifier, + kind: GtEq, ), leading_trivia: [], trailing_trivia: [ @@ -138,4 +157,23 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-06/case.fuse ), ], ), + TokenReference( + token: Token( + span: Span( + start: 21, + end: 24, + ), + kind: Identifier, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 24, + end: 25, + ), + kind: Whitespace, + ), + ], + ), ] diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-07/ast.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-07/ast.snap index 0362b6c..b3db450 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-07/ast.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-07/ast.snap @@ -1,43 +1,56 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "-x * 2\n" +description: "x = -x * 2\n" expression: parsed.chunk input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse --- Some(Chunk( span: Span( start: 0, - end: 7, + end: 11, ), body: Block( statements: [ Expression(BinaryOperator(BinaryOperator( - kind: Multiply(Span( - start: 3, - end: 4, + kind: Assignment(Span( + start: 2, + end: 3, )), - lhs: UnaryOperator(UnaryOperator( - kind: Minus(Span( + lhs: Identifier(Identifier( + span: Span( start: 0, end: 1, + ), + name: Atom("x"), + )), + rhs: BinaryOperator(BinaryOperator( + kind: Multiply(Span( + start: 7, + end: 8, + )), + lhs: UnaryOperator(UnaryOperator( + kind: Minus(Span( + start: 4, + end: 5, + )), + expression: Identifier(Identifier( + span: Span( + start: 5, + end: 6, + ), + name: Atom("x"), + )), )), - expression: Identifier(Identifier( + rhs: NumberLiteral(NumberLiteral( span: Span( - start: 1, - end: 2, + start: 9, + end: 10, ), - name: Atom("x"), + raw: Atom("2"), + value: 2.0, + kind: Decimal, )), )), - rhs: NumberLiteral(NumberLiteral( - span: Span( - start: 5, - end: 6, - ), - raw: Atom("2"), - value: 2.0, - kind: Decimal, - )), ))), ], ), diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse b/crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse index 03d14f4..19cf417 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse @@ -1 +1 @@ --x * 2 +x = -x * 2 diff --git a/crates/fuse-parser/tests/cases/pass/binary-operator-07/tokens.snap b/crates/fuse-parser/tests/cases/pass/binary-operator-07/tokens.snap index 9d89489..62032f7 100644 --- a/crates/fuse-parser/tests/cases/pass/binary-operator-07/tokens.snap +++ b/crates/fuse-parser/tests/cases/pass/binary-operator-07/tokens.snap @@ -1,6 +1,6 @@ --- source: crates/fuse-parser/tests/cases/mod.rs -description: "-x * 2\n" +description: "x = -x * 2\n" expression: tokens input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse --- @@ -11,6 +11,44 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse start: 0, end: 1, ), + kind: Identifier, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 1, + end: 2, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 2, + end: 3, + ), + kind: Eq, + ), + leading_trivia: [], + trailing_trivia: [ + Token( + span: Span( + start: 3, + end: 4, + ), + kind: Whitespace, + ), + ], + ), + TokenReference( + token: Token( + span: Span( + start: 4, + end: 5, + ), kind: Minus, ), leading_trivia: [], @@ -19,8 +57,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse TokenReference( token: Token( span: Span( - start: 1, - end: 2, + start: 5, + end: 6, ), kind: Identifier, ), @@ -28,8 +66,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse trailing_trivia: [ Token( span: Span( - start: 2, - end: 3, + start: 6, + end: 7, ), kind: Whitespace, ), @@ -38,8 +76,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse TokenReference( token: Token( span: Span( - start: 3, - end: 4, + start: 7, + end: 8, ), kind: Star, ), @@ -47,8 +85,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse trailing_trivia: [ Token( span: Span( - start: 4, - end: 5, + start: 8, + end: 9, ), kind: Whitespace, ), @@ -57,8 +95,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse TokenReference( token: Token( span: Span( - start: 5, - end: 6, + start: 9, + end: 10, ), kind: NumberLiteral, ), @@ -66,8 +104,8 @@ input_file: crates/fuse-parser/tests/cases/pass/binary-operator-07/case.fuse trailing_trivia: [ Token( span: Span( - start: 6, - end: 7, + start: 10, + end: 11, ), kind: Whitespace, ),