biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsVariableStatement {
            declaration: JsVariableDeclaration {
                kind: LET_KW@0..4 "let" [] [Whitespace(" ")],
                declarators: JsVariableDeclaratorList [
                    JsVariableDeclarator {
                        id: JsIdentifierBinding {
                            name_token: IDENT@4..8 "obj" [] [Whitespace(" ")],
                        },
                        variable_annotation: missing (optional),
                        initializer: JsInitializerClause {
                            eq_token: EQ@8..10 "=" [] [Whitespace(" ")],
                            expression: JsObjectExpression {
                                l_curly_token: L_CURLY@10..11 "{" [] [],
                                members: JsObjectMemberList [],
                                r_curly_token: R_CURLY@11..12 "}" [] [],
                            },
                        },
                    },
                ],
            },
            semicolon_token: SEMICOLON@12..13 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@13..15 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@15..17 "a" [] [Whitespace(" ")],
                    },
                    attributes: JsxAttributeList [
                        JsxSpreadAttribute {
                            l_curly_token: L_CURLY@17..18 "{" [] [],
                            dotdotdot_token: DOT3@18..21 "..." [] [],
                            argument: JsUnknownExpression {
                                items: [
                                    JsIdentifierExpression {
                                        name: JsReferenceIdentifier {
                                            value_token: IDENT@21..24 "obj" [] [],
                                        },
                                    },
                                    COMMA@24..26 "," [] [Whitespace(" ")],
                                    JsIdentifierExpression {
                                        name: JsReferenceIdentifier {
                                            value_token: IDENT@26..31 "other" [] [],
                                        },
                                    },
                                ],
                            },
                            r_curly_token: R_CURLY@31..33 "}" [] [Whitespace(" ")],
                        },
                    ],
                    slash_token: SLASH@33..34 "/" [] [],
                    r_angle_token: R_ANGLE@34..35 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@35..36 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@36..38 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@38..40 "a" [] [Whitespace(" ")],
                    },
                    attributes: JsxAttributeList [
                        JsxSpreadAttribute {
                            l_curly_token: missing (required),
                            dotdotdot_token: DOT3@40..43 "..." [] [],
                            argument: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@43..46 "obj" [] [],
                                },
                            },
                            r_curly_token: R_CURLY@46..48 "}" [] [Whitespace(" ")],
                        },
                    ],
                    slash_token: SLASH@48..49 "/" [] [],
                    r_angle_token: R_ANGLE@49..50 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@50..51 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@51..53 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@53..55 "a" [] [Whitespace(" ")],
                    },
                    attributes: JsxAttributeList [
                        JsxSpreadAttribute {
                            l_curly_token: L_CURLY@55..56 "{" [] [],
                            dotdotdot_token: missing (required),
                            argument: JsIdentifierExpression {
                                name: JsReferenceIdentifier {
                                    value_token: IDENT@56..59 "obj" [] [],
                                },
                            },
                            r_curly_token: R_CURLY@59..61 "}" [] [Whitespace(" ")],
                        },
                    ],
                    slash_token: SLASH@61..62 "/" [] [],
                    r_angle_token: R_ANGLE@62..63 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@63..64 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@64..66 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@66..69 "div" [] [],
                    },
                    attributes: JsxAttributeList [
                        JsxSpreadAttribute {
                            l_curly_token: L_CURLY@69..77 "{" [Newline("\n"), Whitespace("      ")] [],
                            dotdotdot_token: DOT3@77..80 "..." [] [],
                            argument: JsObjectExpression {
                                l_curly_token: L_CURLY@80..81 "{" [] [],
                                members: JsObjectMemberList [],
                                r_curly_token: R_CURLY@81..130 "}" [] [Whitespace(" "), Comments("/*\n      // @ts-ignor ..."), Whitespace(" "), Comments("/* prettier-ignore */")],
                            },
                            r_curly_token: missing (required),
                        },
                        JsxAttribute {
                            name: JsxName {
                                value_token: JSX_IDENT@130..148 "invalidProp" [Newline("\n"), Whitespace("      ")] [],
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@148..149 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@149..161 "\"HelloWorld\"" [] [],
                                },
                            },
                        },
                    ],
                    slash_token: SLASH@161..167 "/" [Newline("\n"), Whitespace("    ")] [],
                    r_angle_token: R_ANGLE@167..168 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@168..169 ";" [] [],
        },
    ],
    eof_token: EOF@169..170 "" [Newline("\n")] [],
}

0: JS_MODULE@0..170
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..169
    0: JS_VARIABLE_STATEMENT@0..13
      0: JS_VARIABLE_DECLARATION@0..12
        0: LET_KW@0..4 "let" [] [Whitespace(" ")]
        1: JS_VARIABLE_DECLARATOR_LIST@4..12
          0: JS_VARIABLE_DECLARATOR@4..12
            0: JS_IDENTIFIER_BINDING@4..8
              0: IDENT@4..8 "obj" [] [Whitespace(" ")]
            1: (empty)
            2: JS_INITIALIZER_CLAUSE@8..12
              0: EQ@8..10 "=" [] [Whitespace(" ")]
              1: JS_OBJECT_EXPRESSION@10..12
                0: L_CURLY@10..11 "{" [] []
                1: JS_OBJECT_MEMBER_LIST@11..11
                2: R_CURLY@11..12 "}" [] []
      1: SEMICOLON@12..13 ";" [] []
    1: JS_EXPRESSION_STATEMENT@13..36
      0: JSX_TAG_EXPRESSION@13..35
        0: JSX_SELF_CLOSING_ELEMENT@13..35
          0: L_ANGLE@13..15 "<" [Newline("\n")] []
          1: JSX_NAME@15..17
            0: JSX_IDENT@15..17 "a" [] [Whitespace(" ")]
          2: JSX_ATTRIBUTE_LIST@17..33
            0: JSX_SPREAD_ATTRIBUTE@17..33
              0: L_CURLY@17..18 "{" [] []
              1: DOT3@18..21 "..." [] []
              2: JS_UNKNOWN_EXPRESSION@21..31
                0: JS_IDENTIFIER_EXPRESSION@21..24
                  0: JS_REFERENCE_IDENTIFIER@21..24
                    0: IDENT@21..24 "obj" [] []
                1: COMMA@24..26 "," [] [Whitespace(" ")]
                2: JS_IDENTIFIER_EXPRESSION@26..31
                  0: JS_REFERENCE_IDENTIFIER@26..31
                    0: IDENT@26..31 "other" [] []
              3: R_CURLY@31..33 "}" [] [Whitespace(" ")]
          3: SLASH@33..34 "/" [] []
          4: R_ANGLE@34..35 ">" [] []
      1: SEMICOLON@35..36 ";" [] []
    2: JS_EXPRESSION_STATEMENT@36..51
      0: JSX_TAG_EXPRESSION@36..50
        0: JSX_SELF_CLOSING_ELEMENT@36..50
          0: L_ANGLE@36..38 "<" [Newline("\n")] []
          1: JSX_NAME@38..40
            0: JSX_IDENT@38..40 "a" [] [Whitespace(" ")]
          2: JSX_ATTRIBUTE_LIST@40..48
            0: JSX_SPREAD_ATTRIBUTE@40..48
              0: (empty)
              1: DOT3@40..43 "..." [] []
              2: JS_IDENTIFIER_EXPRESSION@43..46
                0: JS_REFERENCE_IDENTIFIER@43..46
                  0: IDENT@43..46 "obj" [] []
              3: R_CURLY@46..48 "}" [] [Whitespace(" ")]
          3: SLASH@48..49 "/" [] []
          4: R_ANGLE@49..50 ">" [] []
      1: SEMICOLON@50..51 ";" [] []
    3: JS_EXPRESSION_STATEMENT@51..64
      0: JSX_TAG_EXPRESSION@51..63
        0: JSX_SELF_CLOSING_ELEMENT@51..63
          0: L_ANGLE@51..53 "<" [Newline("\n")] []
          1: JSX_NAME@53..55
            0: JSX_IDENT@53..55 "a" [] [Whitespace(" ")]
          2: JSX_ATTRIBUTE_LIST@55..61
            0: JSX_SPREAD_ATTRIBUTE@55..61
              0: L_CURLY@55..56 "{" [] []
              1: (empty)
              2: JS_IDENTIFIER_EXPRESSION@56..59
                0: JS_REFERENCE_IDENTIFIER@56..59
                  0: IDENT@56..59 "obj" [] []
              3: R_CURLY@59..61 "}" [] [Whitespace(" ")]
          3: SLASH@61..62 "/" [] []
          4: R_ANGLE@62..63 ">" [] []
      1: SEMICOLON@63..64 ";" [] []
    4: JS_EXPRESSION_STATEMENT@64..169
      0: JSX_TAG_EXPRESSION@64..168
        0: JSX_SELF_CLOSING_ELEMENT@64..168
          0: L_ANGLE@64..66 "<" [Newline("\n")] []
          1: JSX_NAME@66..69
            0: JSX_IDENT@66..69 "div" [] []
          2: JSX_ATTRIBUTE_LIST@69..161
            0: JSX_SPREAD_ATTRIBUTE@69..130
              0: L_CURLY@69..77 "{" [Newline("\n"), Whitespace("      ")] []
              1: DOT3@77..80 "..." [] []
              2: JS_OBJECT_EXPRESSION@80..130
                0: L_CURLY@80..81 "{" [] []
                1: JS_OBJECT_MEMBER_LIST@81..81
                2: R_CURLY@81..130 "}" [] [Whitespace(" "), Comments("/*\n      // @ts-ignor ..."), Whitespace(" "), Comments("/* prettier-ignore */")]
              3: (empty)
            1: JSX_ATTRIBUTE@130..161
              0: JSX_NAME@130..148
                0: JSX_IDENT@130..148 "invalidProp" [Newline("\n"), Whitespace("      ")] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@148..161
                0: EQ@148..149 "=" [] []
                1: JSX_STRING@149..161
                  0: JSX_STRING_LITERAL@149..161 "\"HelloWorld\"" [] []
          3: SLASH@161..167 "/" [Newline("\n"), Whitespace("    ")] []
          4: R_ANGLE@167..168 ">" [] []
      1: SEMICOLON@168..169 ";" [] []
  4: EOF@169..170 "" [Newline("\n")] []
--
error[SyntaxError]: Comma operator isn't a valid value for a JSX spread argument.
  ┌─ spread_attribute_error.jsx:2:8
  │
2 │ <a {...obj, other} />;
  │        ^^^^^^^^^^

--
error[SyntaxError]: expected `'{'` but instead found `...`
  ┌─ spread_attribute_error.jsx:3:4
  │
3 │ <a ...obj} />;
  │    ^^^ unexpected

--
error[SyntaxError]: expected `...` but instead found `obj`
  ┌─ spread_attribute_error.jsx:4:5
  │
4 │ <a {obj} />;
  │     ^^^ unexpected

--
error[SyntaxError]: expected `'}'` but instead found `invalidProp`
  ┌─ spread_attribute_error.jsx:8:7
  │
8 │       invalidProp="HelloWorld"
  │       ^^^^^^^^^^^ unexpected

--
let obj = {};
<a {...obj, other} />;
<a ...obj} />;
<a {obj} />;
<div
      {...{} /*
      // @ts-ignore */ /* prettier-ignore */
      invalidProp="HelloWorld"
    />;