SOURCE_FILE@0..575
  FN@0..574
    FN_KW@0..2 "fn"
    WHITESPACE@2..3 " "
    NAME@3..7
      IDENT@3..7 "main"
    PARAM_LIST@7..9
      L_PAREN@7..8 "("
      R_PAREN@8..9 ")"
    WHITESPACE@9..10 " "
    BLOCK_EXPR@10..574
      L_CURLY@10..11 "{"
      WHITESPACE@11..16 "\n    "
      ENUM@16..152
        ENUM_KW@16..20 "enum"
        WHITESPACE@20..21 " "
        NAME@21..25
          IDENT@21..25 "Test"
        WHITESPACE@25..26 " "
        VARIANT_LIST@26..152
          L_CURLY@26..27 "{"
          WHITESPACE@27..36 "\n        "
          VARIANT@36..40
            NAME@36..40
              IDENT@36..40 "Var1"
          COMMA@40..41 ","
          WHITESPACE@41..50 "\n        "
          VARIANT@50..62
            NAME@50..54
              IDENT@50..54 "Var2"
            TUPLE_FIELD_LIST@54..62
              L_PAREN@54..55 "("
              TUPLE_FIELD@55..61
                PATH_TYPE@55..61
                  PATH@55..61
                    PATH_SEGMENT@55..61
                      NAME_REF@55..61
                        IDENT@55..61 "String"
              R_PAREN@61..62 ")"
          COMMA@62..63 ","
          WHITESPACE@63..72 "\n        "
          VARIANT@72..145
            NAME@72..76
              IDENT@72..76 "Var3"
            WHITESPACE@76..77 " "
            RECORD_FIELD_LIST@77..145
              L_CURLY@77..78 "{"
              WHITESPACE@78..91 "\n            "
              RECORD_FIELD@91..95
                NAME@91..94
                  IDENT@91..94 "abc"
                COLON@94..95 ":"
              WHITESPACE@95..96 " "
              ERROR@96..98
                L_CURLY@96..97 "{"
                R_CURLY@97..98 "}"
              ERROR@98..99
                COMMA@98..99 ","
              WHITESPACE@99..100 " "
              COMMENT@100..135 "//~ ERROR: expected t ..."
              WHITESPACE@135..144 "\n        "
              R_CURLY@144..145 "}"
          COMMA@145..146 ","
          WHITESPACE@146..151 "\n    "
          R_CURLY@151..152 "}"
      WHITESPACE@152..158 "\n\n    "
      COMMENT@158..171 "// recover..."
      WHITESPACE@171..176 "\n    "
      LET_STMT@176..186
        LET_KW@176..179 "let"
        WHITESPACE@179..180 " "
        IDENT_PAT@180..181
          NAME@180..181
            IDENT@180..181 "a"
        WHITESPACE@181..182 " "
        EQ@182..183 "="
        WHITESPACE@183..184 " "
        LITERAL@184..185
          INT_NUMBER@184..185 "1"
        SEMICOLON@185..186 ";"
      WHITESPACE@186..191 "\n    "
      ENUM@191..223
        ENUM_KW@191..195 "enum"
        WHITESPACE@195..196 " "
        NAME@196..201
          IDENT@196..201 "Test2"
        WHITESPACE@201..202 " "
        VARIANT_LIST@202..223
          L_CURLY@202..203 "{"
          WHITESPACE@203..212 "\n        "
          VARIANT@212..216
            NAME@212..216
              IDENT@212..216 "Fine"
          COMMA@216..217 ","
          WHITESPACE@217..222 "\n    "
          R_CURLY@222..223 "}"
      WHITESPACE@223..229 "\n\n    "
      ENUM@229..300
        ENUM_KW@229..233 "enum"
        WHITESPACE@233..234 " "
        NAME@234..239
          IDENT@234..239 "Test3"
        WHITESPACE@239..240 " "
        VARIANT_LIST@240..300
          L_CURLY@240..241 "{"
          WHITESPACE@241..250 "\n        "
          VARIANT@250..293
            NAME@250..259
              IDENT@250..259 "StillFine"
            WHITESPACE@259..260 " "
            RECORD_FIELD_LIST@260..293
              L_CURLY@260..261 "{"
              WHITESPACE@261..274 "\n            "
              RECORD_FIELD@274..282
                NAME@274..277
                  IDENT@274..277 "def"
                COLON@277..278 ":"
                WHITESPACE@278..279 " "
                PATH_TYPE@279..282
                  PATH@279..282
                    PATH_SEGMENT@279..282
                      NAME_REF@279..282
                        IDENT@279..282 "i32"
              COMMA@282..283 ","
              WHITESPACE@283..292 "\n        "
              R_CURLY@292..293 "}"
          COMMA@293..294 ","
          WHITESPACE@294..299 "\n    "
          R_CURLY@299..300 "}"
      WHITESPACE@300..306 "\n\n    "
      EXPR_STMT@306..459
        BLOCK_EXPR@306..459
          L_CURLY@306..307 "{"
          WHITESPACE@307..316 "\n        "
          ENUM@316..453
            COMMENT@316..329 "// fail again"
            WHITESPACE@329..338 "\n        "
            ENUM_KW@338..342 "enum"
            WHITESPACE@342..343 " "
            NAME@343..348
              IDENT@343..348 "Test4"
            WHITESPACE@348..349 " "
            VARIANT_LIST@349..453
              L_CURLY@349..350 "{"
              WHITESPACE@350..363 "\n            "
              VARIANT@363..372
                NAME@363..367
                  IDENT@363..367 "Nope"
                TUPLE_FIELD_LIST@367..372
                  L_PAREN@367..368 "("
                  TUPLE_FIELD@368..371
                    PATH_TYPE@368..371
                      PATH@368..371
                        PATH_SEGMENT@368..371
                          NAME_REF@368..371
                            IDENT@368..371 "i32"
                  WHITESPACE@371..372 " "
                  ERROR@372..372
              ERROR@372..374
                L_CURLY@372..373 "{"
                R_CURLY@373..374 "}"
              ERROR@374..375
                R_PAREN@374..375 ")"
              WHITESPACE@375..376 " "
              COMMENT@376..396 "//~ ERROR: found `{`"
              WHITESPACE@396..422 "\n                     ..."
              COMMENT@422..443 "//~^ ERROR: found `{`"
              WHITESPACE@443..452 "\n        "
              R_CURLY@452..453 "}"
          WHITESPACE@453..458 "\n    "
          R_CURLY@458..459 "}"
      WHITESPACE@459..464 "\n    "
      COMMENT@464..486 "// still recover later"
      WHITESPACE@486..491 "\n    "
      LET_STMT@491..510
        LET_KW@491..494 "let"
        WHITESPACE@494..495 " "
        IDENT_PAT@495..505
          NAME@495..505
            IDENT@495..505 "bad_syntax"
        WHITESPACE@505..506 " "
        EQ@506..507 "="
        WHITESPACE@507..508 " "
        ERROR@508..509
          UNDERSCORE@508..509 "_"
        SEMICOLON@509..510 ";"
      WHITESPACE@510..511 " "
      COMMENT@511..572 "//~ ERROR: expected e ..."
      WHITESPACE@572..573 "\n"
      R_CURLY@573..574 "}"
  WHITESPACE@574..575 "\n"
error 95..95: expected type
error 95..95: expected COMMA
error 96..96: expected field
error 98..98: expected field declaration
error 371..371: expected COMMA
error 372..372: expected a type
error 372..372: expected R_PAREN
error 372..372: expected COMMA
error 372..372: expected enum variant
error 374..374: expected enum variant
error 508..508: expected expression