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: JsCallExpression {
                callee: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@0..3 "foo" [] [],
                    },
                },
                optional_chain_token: missing (optional),
                type_arguments: missing (optional),
                arguments: JsCallArguments {
                    l_paren_token: L_PAREN@3..4 "(" [] [],
                    args: JsCallArgumentList [
                        JsBinaryExpression {
                            left: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@4..8 "foo" [] [Whitespace(" ")],
                                },
                            },
                            operator_token: PLUS@8..9 "+" [] [],
                            right: missing (required),
                        },
                    ],
                    r_paren_token: R_PAREN@9..10 ")" [] [],
                },
            },
            semicolon_token: SEMICOLON@10..11 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsBinaryExpression {
                left: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@11..16 "foo" [Newline("\n")] [Whitespace(" ")],
                    },
                },
                operator_token: PLUS@16..18 "+" [] [Whitespace(" ")],
                right: JsBinaryExpression {
                    left: missing (required),
                    operator_token: STAR@18..20 "*" [] [Whitespace(" ")],
                    right: JsNumberLiteralExpression {
                        value_token: JS_NUMBER_LITERAL@20..21 "2" [] [],
                    },
                },
            },
            semicolon_token: SEMICOLON@21..22 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsBinaryExpression {
                left: JsUnaryExpression {
                    operator_token: BANG@22..24 "!" [Newline("\n")] [],
                    argument: JsIdentifierExpression {
                        name: JsReferenceIdentifier {
                            value_token: IDENT@24..28 "foo" [] [Whitespace(" ")],
                        },
                    },
                },
                operator_token: STAR@28..30 "*" [] [Whitespace(" ")],
                right: JsIdentifierExpression {
                    name: JsReferenceIdentifier {
                        value_token: IDENT@30..33 "bar" [] [],
                    },
                },
            },
            semicolon_token: SEMICOLON@33..34 ";" [] [],
        },
    ],
    eof_token: EOF@34..35 "" [Newline("\n")] [],
}

0: JS_MODULE@0..35
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..34
    0: JS_EXPRESSION_STATEMENT@0..11
      0: JS_CALL_EXPRESSION@0..10
        0: JS_IDENTIFIER_EXPRESSION@0..3
          0: JS_REFERENCE_IDENTIFIER@0..3
            0: IDENT@0..3 "foo" [] []
        1: (empty)
        2: (empty)
        3: JS_CALL_ARGUMENTS@3..10
          0: L_PAREN@3..4 "(" [] []
          1: JS_CALL_ARGUMENT_LIST@4..9
            0: JS_BINARY_EXPRESSION@4..9
              0: JS_IDENTIFIER_EXPRESSION@4..8
                0: JS_REFERENCE_IDENTIFIER@4..8
                  0: IDENT@4..8 "foo" [] [Whitespace(" ")]
              1: PLUS@8..9 "+" [] []
              2: (empty)
          2: R_PAREN@9..10 ")" [] []
      1: SEMICOLON@10..11 ";" [] []
    1: JS_EXPRESSION_STATEMENT@11..22
      0: JS_BINARY_EXPRESSION@11..21
        0: JS_IDENTIFIER_EXPRESSION@11..16
          0: JS_REFERENCE_IDENTIFIER@11..16
            0: IDENT@11..16 "foo" [Newline("\n")] [Whitespace(" ")]
        1: PLUS@16..18 "+" [] [Whitespace(" ")]
        2: JS_BINARY_EXPRESSION@18..21
          0: (empty)
          1: STAR@18..20 "*" [] [Whitespace(" ")]
          2: JS_NUMBER_LITERAL_EXPRESSION@20..21
            0: JS_NUMBER_LITERAL@20..21 "2" [] []
      1: SEMICOLON@21..22 ";" [] []
    2: JS_EXPRESSION_STATEMENT@22..34
      0: JS_BINARY_EXPRESSION@22..33
        0: JS_UNARY_EXPRESSION@22..28
          0: BANG@22..24 "!" [Newline("\n")] []
          1: JS_IDENTIFIER_EXPRESSION@24..28
            0: JS_REFERENCE_IDENTIFIER@24..28
              0: IDENT@24..28 "foo" [] [Whitespace(" ")]
        1: STAR@28..30 "*" [] [Whitespace(" ")]
        2: JS_IDENTIFIER_EXPRESSION@30..33
          0: JS_REFERENCE_IDENTIFIER@30..33
            0: IDENT@30..33 "bar" [] []
      1: SEMICOLON@33..34 ";" [] []
  4: EOF@34..35 "" [Newline("\n")] []
--
binary_expressions_err.js:1:10 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected an expression but instead found ')'.
  
  > 1 │ foo(foo +);
      │          ^
    2 │ foo + * 2;
    3 │ !foo * bar;
  
  i Expected an expression here.
  
  > 1 │ foo(foo +);
      │          ^
    2 │ foo + * 2;
    3 │ !foo * bar;
  
--
binary_expressions_err.js:2:7 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Expected an expression for the left hand side of the `*` operator.
  
    1 │ foo(foo +);
  > 2 │ foo + * 2;
      │       ^
    3 │ !foo * bar;
    4 │ 
  
  i This operator requires a left hand side value
  
--
foo(foo +);
foo + * 2;
!foo * bar;