SOURCE_FILE
  FN
    FN_KW "fn"
    WHITESPACE " "
    NAME
      IDENT "main"
    PARAM_LIST
      L_PAREN "("
      R_PAREN ")"
    WHITESPACE " "
    BLOCK_EXPR
      STMT_LIST
        L_CURLY "{"
        WHITESPACE "\n    "
        ENUM
          ENUM_KW "enum"
          WHITESPACE " "
          NAME
            IDENT "Test"
          WHITESPACE " "
          VARIANT_LIST
            L_CURLY "{"
            WHITESPACE "\n        "
            VARIANT
              NAME
                IDENT "Var1"
            COMMA ","
            WHITESPACE "\n        "
            VARIANT
              NAME
                IDENT "Var2"
              TUPLE_FIELD_LIST
                L_PAREN "("
                TUPLE_FIELD
                  PATH_TYPE
                    PATH
                      PATH_SEGMENT
                        NAME_REF
                          IDENT "String"
                R_PAREN ")"
            COMMA ","
            WHITESPACE "\n        "
            VARIANT
              NAME
                IDENT "Var3"
              WHITESPACE " "
              RECORD_FIELD_LIST
                L_CURLY "{"
                WHITESPACE "\n            "
                RECORD_FIELD
                  NAME
                    IDENT "abc"
                  COLON ":"
                WHITESPACE " "
                ERROR
                  L_CURLY "{"
                  R_CURLY "}"
                ERROR
                  COMMA ","
                WHITESPACE " "
                COMMENT "//~ ERROR: expected type, found `{`"
                WHITESPACE "\n        "
                R_CURLY "}"
            COMMA ","
            WHITESPACE "\n    "
            R_CURLY "}"
        WHITESPACE "\n\n    "
        COMMENT "// recover..."
        WHITESPACE "\n    "
        LET_STMT
          LET_KW "let"
          WHITESPACE " "
          IDENT_PAT
            NAME
              IDENT "a"
          WHITESPACE " "
          EQ "="
          WHITESPACE " "
          LITERAL
            INT_NUMBER "1"
          SEMICOLON ";"
        WHITESPACE "\n    "
        ENUM
          ENUM_KW "enum"
          WHITESPACE " "
          NAME
            IDENT "Test2"
          WHITESPACE " "
          VARIANT_LIST
            L_CURLY "{"
            WHITESPACE "\n        "
            VARIANT
              NAME
                IDENT "Fine"
            COMMA ","
            WHITESPACE "\n    "
            R_CURLY "}"
        WHITESPACE "\n\n    "
        ENUM
          ENUM_KW "enum"
          WHITESPACE " "
          NAME
            IDENT "Test3"
          WHITESPACE " "
          VARIANT_LIST
            L_CURLY "{"
            WHITESPACE "\n        "
            VARIANT
              NAME
                IDENT "StillFine"
              WHITESPACE " "
              RECORD_FIELD_LIST
                L_CURLY "{"
                WHITESPACE "\n            "
                RECORD_FIELD
                  NAME
                    IDENT "def"
                  COLON ":"
                  WHITESPACE " "
                  PATH_TYPE
                    PATH
                      PATH_SEGMENT
                        NAME_REF
                          IDENT "i32"
                COMMA ","
                WHITESPACE "\n        "
                R_CURLY "}"
            COMMA ","
            WHITESPACE "\n    "
            R_CURLY "}"
        WHITESPACE "\n\n    "
        EXPR_STMT
          BLOCK_EXPR
            STMT_LIST
              L_CURLY "{"
              WHITESPACE "\n        "
              ENUM
                COMMENT "// fail again"
                WHITESPACE "\n        "
                ENUM_KW "enum"
                WHITESPACE " "
                NAME
                  IDENT "Test4"
                WHITESPACE " "
                VARIANT_LIST
                  L_CURLY "{"
                  WHITESPACE "\n            "
                  VARIANT
                    NAME
                      IDENT "Nope"
                    TUPLE_FIELD_LIST
                      L_PAREN "("
                      TUPLE_FIELD
                        PATH_TYPE
                          PATH
                            PATH_SEGMENT
                              NAME_REF
                                IDENT "i32"
                      WHITESPACE " "
                      ERROR
                  ERROR
                    L_CURLY "{"
                    R_CURLY "}"
                  ERROR
                    R_PAREN ")"
                  WHITESPACE " "
                  COMMENT "//~ ERROR: found `{`"
                  WHITESPACE "\n                         "
                  COMMENT "//~^ ERROR: found `{`"
                  WHITESPACE "\n        "
                  R_CURLY "}"
              WHITESPACE "\n    "
              R_CURLY "}"
        WHITESPACE "\n    "
        COMMENT "// still recover later"
        WHITESPACE "\n    "
        LET_STMT
          LET_KW "let"
          WHITESPACE " "
          IDENT_PAT
            NAME
              IDENT "bad_syntax"
          WHITESPACE " "
          EQ "="
          WHITESPACE " "
          ERROR
            UNDERSCORE "_"
          SEMICOLON ";"
        WHITESPACE " "
        COMMENT "//~ ERROR: expected expression, found reserved identifier `_`"
        WHITESPACE "\n"
        R_CURLY "}"
  WHITESPACE "\n"
error 95: expected type
error 95: expected COMMA
error 96: expected field
error 98: expected field declaration
error 371: expected COMMA
error 372: expected a type
error 372: expected R_PAREN
error 372: expected COMMA
error 372: expected enum variant
error 374: expected enum variant
error 508: expected expression
