biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsFunctionDeclaration {
            async_token: missing (optional),
            function_token: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")],
            star_token: missing (optional),
            id: JsIdentifierBinding {
                name_token: IDENT@9..10 "f" [] [],
            },
            type_parameters: missing (optional),
            parameters: JsParameters {
                l_paren_token: L_PAREN@10..11 "(" [] [],
                items: JsParameterList [],
                r_paren_token: R_PAREN@11..13 ")" [] [Whitespace(" ")],
            },
            return_type_annotation: missing (optional),
            body: JsFunctionBody {
                l_curly_token: L_CURLY@13..14 "{" [] [],
                directives: JsDirectiveList [],
                statements: JsStatementList [
                    JsReturnStatement {
                        return_token: RETURN_KW@14..26 "return" [Newline("\n"), Whitespace("    ")] [Whitespace(" ")],
                        argument: JsxTagExpression {
                            tag: JsxElement {
                                opening_element: JsxOpeningElement {
                                    l_angle_token: L_ANGLE@26..27 "<" [] [],
                                    name: JsxName {
                                        value_token: JSX_IDENT@27..31 "div" [] [Whitespace(" ")],
                                    },
                                    type_arguments: missing (optional),
                                    attributes: JsxAttributeList [
                                        JsxAttribute {
                                            name: JsxName {
                                                value_token: JSX_IDENT@31..45 "string_literal" [] [],
                                            },
                                            initializer: JsxAttributeInitializerClause {
                                                eq_token: EQ@45..46 "=" [] [],
                                                value: JsxString {
                                                    value_token: JSX_STRING_LITERAL@46..50 "\"a\"" [] [Whitespace(" ")],
                                                },
                                            },
                                        },
                                        JsxAttribute {
                                            name: JsxName {
                                                value_token: JSX_IDENT@50..60 "expression" [] [],
                                            },
                                            initializer: JsxAttributeInitializerClause {
                                                eq_token: EQ@60..61 "=" [] [],
                                                value: JsxExpressionAttributeValue {
                                                    l_curly_token: L_CURLY@61..62 "{" [] [],
                                                    expression: JsNumberLiteralExpression {
                                                        value_token: JS_NUMBER_LITERAL@62..63 "1" [] [],
                                                    },
                                                    r_curly_token: R_CURLY@63..65 "}" [] [Whitespace(" ")],
                                                },
                                            },
                                        },
                                        JsxAttribute {
                                            name: JsxName {
                                                value_token: JSX_IDENT@65..73 "novalue" [] [Whitespace(" ")],
                                            },
                                            initializer: missing (optional),
                                        },
                                        JsxAttribute {
                                            name: JsxName {
                                                value_token: JSX_IDENT@73..75 "el" [] [],
                                            },
                                            initializer: JsxAttributeInitializerClause {
                                                eq_token: EQ@75..76 "=" [] [],
                                                value: JsxSelfClosingElement {
                                                    l_angle_token: L_ANGLE@76..77 "<" [] [],
                                                    name: JsxName {
                                                        value_token: JSX_IDENT@77..78 "a" [] [],
                                                    },
                                                    type_arguments: missing (optional),
                                                    attributes: JsxAttributeList [],
                                                    slash_token: SLASH@78..79 "/" [] [],
                                                    r_angle_token: R_ANGLE@79..80 ">" [] [],
                                                },
                                            },
                                        },
                                    ],
                                    r_angle_token: R_ANGLE@80..81 ">" [] [],
                                },
                                children: JsxChildList [],
                                closing_element: JsxClosingElement {
                                    l_angle_token: L_ANGLE@81..82 "<" [] [],
                                    slash_token: SLASH@82..83 "/" [] [],
                                    name: JsxName {
                                        value_token: JSX_IDENT@83..86 "div" [] [],
                                    },
                                    r_angle_token: R_ANGLE@86..87 ">" [] [],
                                },
                            },
                        },
                        semicolon_token: SEMICOLON@87..88 ";" [] [],
                    },
                ],
                r_curly_token: R_CURLY@88..90 "}" [Newline("\n")] [],
            },
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@90..92 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@92..96 "div" [] [Whitespace(" ")],
                    },
                    type_arguments: missing (optional),
                    attributes: JsxAttributeList [
                        JsxAttribute {
                            name: JsxName {
                                value_token: JSX_IDENT@96..107 "dashed-name" [] [],
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@107..108 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@108..115 "'test'" [] [Whitespace(" ")],
                                },
                            },
                        },
                        JsxAttribute {
                            name: JsxNamespaceName {
                                namespace: JsxName {
                                    value_token: JSX_IDENT@115..118 "use" [] [],
                                },
                                colon_token: COLON@118..119 ":" [] [],
                                name: JsxName {
                                    value_token: JSX_IDENT@119..127 "validate" [] [],
                                },
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@127..128 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@128..135 "\"abcd\"" [] [Whitespace(" ")],
                                },
                            },
                        },
                    ],
                    slash_token: SLASH@135..136 "/" [] [],
                    r_angle_token: R_ANGLE@136..137 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@137..138 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@138..140 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@140..144 "div" [] [Whitespace(" ")],
                    },
                    type_arguments: missing (optional),
                    attributes: JsxAttributeList [
                        JsxAttribute {
                            name: JsxNamespaceName {
                                namespace: JsxName {
                                    value_token: JSX_IDENT@144..165 "use-dashed_underscore" [] [],
                                },
                                colon_token: COLON@165..166 ":" [] [],
                                name: JsxName {
                                    value_token: JSX_IDENT@166..174 "validate" [] [],
                                },
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@174..175 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@175..183 "\"ahaha\"" [] [Whitespace(" ")],
                                },
                            },
                        },
                    ],
                    slash_token: SLASH@183..184 "/" [] [],
                    r_angle_token: R_ANGLE@184..185 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@185..186 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@186..188 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@188..192 "div" [] [Whitespace(" ")],
                    },
                    type_arguments: missing (optional),
                    attributes: JsxAttributeList [
                        JsxAttribute {
                            name: JsxName {
                                value_token: JSX_IDENT@192..208 "multiline-string" [] [],
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@208..209 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@209..233 "'test\n  continues here'" [] [Whitespace(" ")],
                                },
                            },
                        },
                    ],
                    slash_token: SLASH@233..234 "/" [] [],
                    r_angle_token: R_ANGLE@234..235 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@235..236 ";" [] [],
        },
        JsExpressionStatement {
            expression: JsxTagExpression {
                tag: JsxSelfClosingElement {
                    l_angle_token: L_ANGLE@236..238 "<" [Newline("\n")] [],
                    name: JsxName {
                        value_token: JSX_IDENT@238..242 "div" [] [Whitespace(" ")],
                    },
                    type_arguments: missing (optional),
                    attributes: JsxAttributeList [
                        JsxAttribute {
                            name: JsxName {
                                value_token: JSX_IDENT@242..264 "invalid-unicode-escape" [] [],
                            },
                            initializer: JsxAttributeInitializerClause {
                                eq_token: EQ@264..265 "=" [] [],
                                value: JsxString {
                                    value_token: JSX_STRING_LITERAL@265..282 "\"\\u10000\\u20000\"" [] [Whitespace(" ")],
                                },
                            },
                        },
                    ],
                    slash_token: SLASH@282..283 "/" [] [],
                    r_angle_token: R_ANGLE@283..284 ">" [] [],
                },
            },
            semicolon_token: SEMICOLON@284..285 ";" [] [],
        },
    ],
    eof_token: EOF@285..286 "" [Newline("\n")] [],
}

0: JS_MODULE@0..286
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..285
    0: JS_FUNCTION_DECLARATION@0..90
      0: (empty)
      1: FUNCTION_KW@0..9 "function" [] [Whitespace(" ")]
      2: (empty)
      3: JS_IDENTIFIER_BINDING@9..10
        0: IDENT@9..10 "f" [] []
      4: (empty)
      5: JS_PARAMETERS@10..13
        0: L_PAREN@10..11 "(" [] []
        1: JS_PARAMETER_LIST@11..11
        2: R_PAREN@11..13 ")" [] [Whitespace(" ")]
      6: (empty)
      7: JS_FUNCTION_BODY@13..90
        0: L_CURLY@13..14 "{" [] []
        1: JS_DIRECTIVE_LIST@14..14
        2: JS_STATEMENT_LIST@14..88
          0: JS_RETURN_STATEMENT@14..88
            0: RETURN_KW@14..26 "return" [Newline("\n"), Whitespace("    ")] [Whitespace(" ")]
            1: JSX_TAG_EXPRESSION@26..87
              0: JSX_ELEMENT@26..87
                0: JSX_OPENING_ELEMENT@26..81
                  0: L_ANGLE@26..27 "<" [] []
                  1: JSX_NAME@27..31
                    0: JSX_IDENT@27..31 "div" [] [Whitespace(" ")]
                  2: (empty)
                  3: JSX_ATTRIBUTE_LIST@31..80
                    0: JSX_ATTRIBUTE@31..50
                      0: JSX_NAME@31..45
                        0: JSX_IDENT@31..45 "string_literal" [] []
                      1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@45..50
                        0: EQ@45..46 "=" [] []
                        1: JSX_STRING@46..50
                          0: JSX_STRING_LITERAL@46..50 "\"a\"" [] [Whitespace(" ")]
                    1: JSX_ATTRIBUTE@50..65
                      0: JSX_NAME@50..60
                        0: JSX_IDENT@50..60 "expression" [] []
                      1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@60..65
                        0: EQ@60..61 "=" [] []
                        1: JSX_EXPRESSION_ATTRIBUTE_VALUE@61..65
                          0: L_CURLY@61..62 "{" [] []
                          1: JS_NUMBER_LITERAL_EXPRESSION@62..63
                            0: JS_NUMBER_LITERAL@62..63 "1" [] []
                          2: R_CURLY@63..65 "}" [] [Whitespace(" ")]
                    2: JSX_ATTRIBUTE@65..73
                      0: JSX_NAME@65..73
                        0: JSX_IDENT@65..73 "novalue" [] [Whitespace(" ")]
                      1: (empty)
                    3: JSX_ATTRIBUTE@73..80
                      0: JSX_NAME@73..75
                        0: JSX_IDENT@73..75 "el" [] []
                      1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@75..80
                        0: EQ@75..76 "=" [] []
                        1: JSX_SELF_CLOSING_ELEMENT@76..80
                          0: L_ANGLE@76..77 "<" [] []
                          1: JSX_NAME@77..78
                            0: JSX_IDENT@77..78 "a" [] []
                          2: (empty)
                          3: JSX_ATTRIBUTE_LIST@78..78
                          4: SLASH@78..79 "/" [] []
                          5: R_ANGLE@79..80 ">" [] []
                  4: R_ANGLE@80..81 ">" [] []
                1: JSX_CHILD_LIST@81..81
                2: JSX_CLOSING_ELEMENT@81..87
                  0: L_ANGLE@81..82 "<" [] []
                  1: SLASH@82..83 "/" [] []
                  2: JSX_NAME@83..86
                    0: JSX_IDENT@83..86 "div" [] []
                  3: R_ANGLE@86..87 ">" [] []
            2: SEMICOLON@87..88 ";" [] []
        3: R_CURLY@88..90 "}" [Newline("\n")] []
    1: JS_EXPRESSION_STATEMENT@90..138
      0: JSX_TAG_EXPRESSION@90..137
        0: JSX_SELF_CLOSING_ELEMENT@90..137
          0: L_ANGLE@90..92 "<" [Newline("\n")] []
          1: JSX_NAME@92..96
            0: JSX_IDENT@92..96 "div" [] [Whitespace(" ")]
          2: (empty)
          3: JSX_ATTRIBUTE_LIST@96..135
            0: JSX_ATTRIBUTE@96..115
              0: JSX_NAME@96..107
                0: JSX_IDENT@96..107 "dashed-name" [] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@107..115
                0: EQ@107..108 "=" [] []
                1: JSX_STRING@108..115
                  0: JSX_STRING_LITERAL@108..115 "'test'" [] [Whitespace(" ")]
            1: JSX_ATTRIBUTE@115..135
              0: JSX_NAMESPACE_NAME@115..127
                0: JSX_NAME@115..118
                  0: JSX_IDENT@115..118 "use" [] []
                1: COLON@118..119 ":" [] []
                2: JSX_NAME@119..127
                  0: JSX_IDENT@119..127 "validate" [] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@127..135
                0: EQ@127..128 "=" [] []
                1: JSX_STRING@128..135
                  0: JSX_STRING_LITERAL@128..135 "\"abcd\"" [] [Whitespace(" ")]
          4: SLASH@135..136 "/" [] []
          5: R_ANGLE@136..137 ">" [] []
      1: SEMICOLON@137..138 ";" [] []
    2: JS_EXPRESSION_STATEMENT@138..186
      0: JSX_TAG_EXPRESSION@138..185
        0: JSX_SELF_CLOSING_ELEMENT@138..185
          0: L_ANGLE@138..140 "<" [Newline("\n")] []
          1: JSX_NAME@140..144
            0: JSX_IDENT@140..144 "div" [] [Whitespace(" ")]
          2: (empty)
          3: JSX_ATTRIBUTE_LIST@144..183
            0: JSX_ATTRIBUTE@144..183
              0: JSX_NAMESPACE_NAME@144..174
                0: JSX_NAME@144..165
                  0: JSX_IDENT@144..165 "use-dashed_underscore" [] []
                1: COLON@165..166 ":" [] []
                2: JSX_NAME@166..174
                  0: JSX_IDENT@166..174 "validate" [] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@174..183
                0: EQ@174..175 "=" [] []
                1: JSX_STRING@175..183
                  0: JSX_STRING_LITERAL@175..183 "\"ahaha\"" [] [Whitespace(" ")]
          4: SLASH@183..184 "/" [] []
          5: R_ANGLE@184..185 ">" [] []
      1: SEMICOLON@185..186 ";" [] []
    3: JS_EXPRESSION_STATEMENT@186..236
      0: JSX_TAG_EXPRESSION@186..235
        0: JSX_SELF_CLOSING_ELEMENT@186..235
          0: L_ANGLE@186..188 "<" [Newline("\n")] []
          1: JSX_NAME@188..192
            0: JSX_IDENT@188..192 "div" [] [Whitespace(" ")]
          2: (empty)
          3: JSX_ATTRIBUTE_LIST@192..233
            0: JSX_ATTRIBUTE@192..233
              0: JSX_NAME@192..208
                0: JSX_IDENT@192..208 "multiline-string" [] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@208..233
                0: EQ@208..209 "=" [] []
                1: JSX_STRING@209..233
                  0: JSX_STRING_LITERAL@209..233 "'test\n  continues here'" [] [Whitespace(" ")]
          4: SLASH@233..234 "/" [] []
          5: R_ANGLE@234..235 ">" [] []
      1: SEMICOLON@235..236 ";" [] []
    4: JS_EXPRESSION_STATEMENT@236..285
      0: JSX_TAG_EXPRESSION@236..284
        0: JSX_SELF_CLOSING_ELEMENT@236..284
          0: L_ANGLE@236..238 "<" [Newline("\n")] []
          1: JSX_NAME@238..242
            0: JSX_IDENT@238..242 "div" [] [Whitespace(" ")]
          2: (empty)
          3: JSX_ATTRIBUTE_LIST@242..282
            0: JSX_ATTRIBUTE@242..282
              0: JSX_NAME@242..264
                0: JSX_IDENT@242..264 "invalid-unicode-escape" [] []
              1: JSX_ATTRIBUTE_INITIALIZER_CLAUSE@264..282
                0: EQ@264..265 "=" [] []
                1: JSX_STRING@265..282
                  0: JSX_STRING_LITERAL@265..282 "\"\\u10000\\u20000\"" [] [Whitespace(" ")]
          4: SLASH@282..283 "/" [] []
          5: R_ANGLE@283..284 ">" [] []
      1: SEMICOLON@284..285 ";" [] []
  4: EOF@285..286 "" [Newline("\n")] []