biome_js_parser 0.5.7

Biome's JavaScript parser
Documentation
JsModule {
    bom_token: missing (optional),
    interpreter_token: missing (optional),
    directives: JsDirectiveList [],
    items: JsModuleItemList [
        JsLabeledStatement {
            label: JsLabel {
                value_token: IDENT@0..6 "label1" [] [],
            },
            colon_token: COLON@6..8 ":" [] [Whitespace(" ")],
            body: JsBlockStatement {
                l_curly_token: L_CURLY@8..9 "{" [] [],
                statements: JsStatementList [
                    JsLabeledStatement {
                        label: JsLabel {
                            value_token: IDENT@9..18 "label2" [Newline("\n"), Whitespace("  ")] [],
                        },
                        colon_token: COLON@18..20 ":" [] [Whitespace(" ")],
                        body: JsBlockStatement {
                            l_curly_token: L_CURLY@20..21 "{" [] [],
                            statements: JsStatementList [
                                JsLabeledStatement {
                                    label: JsLabel {
                                        value_token: IDENT@21..32 "label1" [Newline("\n"), Whitespace("    ")] [],
                                    },
                                    colon_token: COLON@32..34 ":" [] [Whitespace(" ")],
                                    body: JsBlockStatement {
                                        l_curly_token: L_CURLY@34..35 "{" [] [],
                                        statements: JsStatementList [],
                                        r_curly_token: R_CURLY@35..36 "}" [] [],
                                    },
                                },
                            ],
                            r_curly_token: R_CURLY@36..40 "}" [Newline("\n"), Whitespace("  ")] [],
                        },
                    },
                ],
                r_curly_token: R_CURLY@40..42 "}" [Newline("\n")] [],
            },
        },
    ],
    eof_token: EOF@42..43 "" [Newline("\n")] [],
}

0: JS_MODULE@0..43
  0: (empty)
  1: (empty)
  2: JS_DIRECTIVE_LIST@0..0
  3: JS_MODULE_ITEM_LIST@0..42
    0: JS_LABELED_STATEMENT@0..42
      0: JS_LABEL@0..6
        0: IDENT@0..6 "label1" [] []
      1: COLON@6..8 ":" [] [Whitespace(" ")]
      2: JS_BLOCK_STATEMENT@8..42
        0: L_CURLY@8..9 "{" [] []
        1: JS_STATEMENT_LIST@9..40
          0: JS_LABELED_STATEMENT@9..40
            0: JS_LABEL@9..18
              0: IDENT@9..18 "label2" [Newline("\n"), Whitespace("  ")] []
            1: COLON@18..20 ":" [] [Whitespace(" ")]
            2: JS_BLOCK_STATEMENT@20..40
              0: L_CURLY@20..21 "{" [] []
              1: JS_STATEMENT_LIST@21..36
                0: JS_LABELED_STATEMENT@21..36
                  0: JS_LABEL@21..32
                    0: IDENT@21..32 "label1" [Newline("\n"), Whitespace("    ")] []
                  1: COLON@32..34 ":" [] [Whitespace(" ")]
                  2: JS_BLOCK_STATEMENT@34..36
                    0: L_CURLY@34..35 "{" [] []
                    1: JS_STATEMENT_LIST@35..35
                    2: R_CURLY@35..36 "}" [] []
              2: R_CURLY@36..40 "}" [Newline("\n"), Whitespace("  ")] []
        2: R_CURLY@40..42 "}" [Newline("\n")] []
  4: EOF@42..43 "" [Newline("\n")] []
--
double_label.js:3:5 parse ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

  × Duplicate statement labels are not allowed
  
    1 │ label1: {
    2 │   label2: {
  > 3 │     label1: {}
      │     ^^^^^^
    4 │   }
    5 │ }
  
  i a second use of `label1` here is not allowed
  
    1 │ label1: {
    2 │   label2: {
  > 3 │     label1: {}
      │     ^^^^^^
    4 │   }
    5 │ }
  
  i `label1` is first used as a label here
  
  > 1 │ label1: {
      │ ^^^^^^
    2 │   label2: {
    3 │     label1: {}
  
--
label1: {
  label2: {
    label1: {}
  }
}