biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsExpressionStatement {
            expression: JsLogicalExpression {
                left: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@0..4 "foo" [] [Whitespace(" ")],
                    },
                },
                operator_token: QUESTION2@4..7 "??" [] [Whitespace(" ")],
                right: JsBinaryExpression {
                    left: missing (required),
                    operator_token: STAR@7..9 "*" [] [Whitespace(" ")],
                    right: JsNumberLiteralExpression {
                        value_token: JS_NUMBER_LITERAL@9..10 "2" [] [],
                    },
                },
            },
            semicolon_token: SEMICOLON@10..11 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsLogicalExpression {
                left: JsUnaryExpression {
                    operator_token: BANG@11..13 "!" [Newline("\n")] [],
                    argument: JsIdentifierExpression {
                        name: JsReferenceIdentifier {
                            value_token: IDENT@13..17 "foo" [] [Whitespace(" ")],
                        },
                    },
                },
                operator_token: AMP2@17..20 "&&" [] [Whitespace(" ")],
                right: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@20..23 "bar" [] [],
                    },
                },
            },
            semicolon_token: SEMICOLON@23..24 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsCallExpression {
                callee: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@24..28 "foo" [Newline("\n")] [],
                    },
                },
                optional_chain_token: missing (optional),
                type_arguments: missing (optional),
                arguments: JsCallArguments {
                    l_paren_token: L_PAREN@28..29 "(" [] [],
                    args: JsCallArgumentList [
                        JsLogicalExpression {
                            left: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@29..33 "foo" [] [Whitespace(" ")],
                                },
                            },
                            operator_token: PIPE2@33..35 "||" [] [],
                            right: missing (required),
                        },
                    ],
                    r_paren_token: R_PAREN@35..36 ")" [] [],
                },
            },
            semicolon_token: missing (optional),
        },
    ],
    eof_token: EOF@36..37 "" [Newline("\n")] [],
}

0: JS_MODULE@0..37
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..36
    0: JS_EXPRESSION_STATEMENT@0..11
      0: JS_LOGICAL_EXPRESSION@0..10
        0: JS_IDENTIFIER_EXPRESSION@0..4
          0: JS_REFERENCE_IDENTIFIER@0..4
            0: IDENT@0..4 "foo" [] [Whitespace(" ")]
        1: QUESTION2@4..7 "??" [] [Whitespace(" ")]
        2: JS_BINARY_EXPRESSION@7..10
          0: (empty)
          1: STAR@7..9 "*" [] [Whitespace(" ")]
          2: JS_NUMBER_LITERAL_EXPRESSION@9..10
            0: JS_NUMBER_LITERAL@9..10 "2" [] []
      1: SEMICOLON@10..11 ";" [] []
    1: JS_EXPRESSION_STATEMENT@11..24
      0: JS_LOGICAL_EXPRESSION@11..23
        0: JS_UNARY_EXPRESSION@11..17
          0: BANG@11..13 "!" [Newline("\n")] []
          1: JS_IDENTIFIER_EXPRESSION@13..17
            0: JS_REFERENCE_IDENTIFIER@13..17
              0: IDENT@13..17 "foo" [] [Whitespace(" ")]
        1: AMP2@17..20 "&&" [] [Whitespace(" ")]
        2: JS_IDENTIFIER_EXPRESSION@20..23
          0: JS_REFERENCE_IDENTIFIER@20..23
            0: IDENT@20..23 "bar" [] []
      1: SEMICOLON@23..24 ";" [] []
    2: JS_EXPRESSION_STATEMENT@24..36
      0: JS_CALL_EXPRESSION@24..36
        0: JS_IDENTIFIER_EXPRESSION@24..28
          0: JS_REFERENCE_IDENTIFIER@24..28
            0: IDENT@24..28 "foo" [Newline("\n")] []
        1: (empty)
        2: (empty)
        3: JS_CALL_ARGUMENTS@28..36
          0: L_PAREN@28..29 "(" [] []
          1: JS_CALL_ARGUMENT_LIST@29..35
            0: JS_LOGICAL_EXPRESSION@29..35
              0: JS_IDENTIFIER_EXPRESSION@29..33
                0: JS_REFERENCE_IDENTIFIER@29..33
                  0: IDENT@29..33 "foo" [] [Whitespace(" ")]
              1: PIPE2@33..35 "||" [] []
              2: (empty)
          2: R_PAREN@35..36 ")" [] []
      1: (empty)
  4: EOF@36..37 "" [Newline("\n")] []
--
logical_expressions_err.js:1:8 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected an expression for the left hand side of the `*` operator.
  
  > 1 │ foo ?? * 2;
      │        ^
    2 │ !foo && bar;
    3 │ foo(foo ||)
  
  i This operator requires a left hand side value
  
--
logical_expressions_err.js:3:11 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected an expression but instead found ')'.
  
    1 │ foo ?? * 2;
    2 │ !foo && bar;
  > 3 │ foo(foo ||)
      │           ^
    4 │ 
  
  i Expected an expression here.
  
    1 │ foo ?? * 2;
    2 │ !foo && bar;
  > 3 │ foo(foo ||)
      │           ^
    4 │ 
  
--
foo ?? * 2;
!foo && bar;
foo(foo ||)