FILE
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('2')
        PsiErrorElement:'(', '+', '-', ';', <operator>, '[' or '}' expected, got 'let'
          <empty list>
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiErrorElement:<pattern> expected, got ';'
          <empty list>
        PsiWhiteSpace(' ')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsParenExprImpl(PAREN_EXPR)
          PsiElement(()('(')
          PsiErrorElement:')' or <expr> expected, got 'let'
            <empty list>
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsParenExprImpl(PAREN_EXPR)
          PsiElement(()('(')
          RsLitExprImpl(LIT_EXPR)
            PsiElement(INTEGER_LITERAL)('1')
          PsiErrorElement:'(', '+', ',', '-', <operator> or '[' expected, got 'let'
            <empty list>
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsTupleExprImpl(TUPLE_EXPR)
          PsiElement(()('(')
          RsLitExprImpl(LIT_EXPR)
            PsiElement(INTEGER_LITERAL)('1')
          PsiElement(,)(',')
          PsiErrorElement:')' or <expr> expected, got 'let'
            <empty list>
      PsiWhiteSpace('\n\n    ')
      PsiComment(<EOL_COMMENT>)('// Distinguish `for` expr from `for<>` in types')
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiElement(:)(':')
        PsiErrorElement:'!', '(', <bound>, <fn pointer type>, <macro call>, <path start>, <ref like type>, '?', '[', _, for, impl or '~' expected, got 'for'
          <empty list>
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsForExprImpl(FOR_EXPR)
          PsiElement(for)('for')
          PsiWhiteSpace(' ')
          RsPatIdentImpl(PAT_IDENT)
            RsPatBindingImpl(PAT_BINDING)
              PsiElement(identifier)('a')
          PsiWhiteSpace(' ')
          PsiElement(in)('in')
          PsiWhiteSpace(' ')
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('b')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiElement(})('}')
      PsiWhiteSpace('\n\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsDotExprImpl(DOT_EXPR)
          RsLitExprImpl(LIT_EXPR)
            PsiElement(FLOAT_LITERAL)('0.0')
          PsiElement(.)('.')
          RsFieldLookupImpl(FIELD_LOOKUP)
            PsiElement(INTEGER_LITERAL)('0e92')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo1')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('1')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            PsiErrorElement:',' unexpected
              PsiElement(,)(',')
            PsiWhiteSpace(' ')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('2')
            PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo2')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            PsiErrorElement:<expr> expected, got ','
              <empty list>
            PsiElement(,)(',')
            PsiElement(,)(',')
            PsiWhiteSpace(' ')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('2')
            PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo3')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('1')
            PsiElement(,)(',')
            PsiErrorElement:',' unexpected
              PsiElement(,)(',')
            PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo4')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('1')
            PsiElement(,)(',')
            PsiErrorElement:<expr> expected, got ';'
              <empty list>
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo5')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            PsiErrorElement:<expr> expected, got ';'
              <empty list>
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo6')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('1')
            PsiElement(,)(',')
            PsiErrorElement:<expr> expected, got 'let'
              <empty list>
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('0')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo7')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            PsiErrorElement:<expr> expected, got 'let'
              <empty list>
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatWildImpl(PAT_WILD)
          PsiElement(_)('_')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('0')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsBlockExprImpl(BLOCK_EXPR)
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsCallExprImpl(CALL_EXPR)
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('foo8')
                RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
                  PsiElement(()('(')
                  RsLitExprImpl(LIT_EXPR)
                    PsiElement(INTEGER_LITERAL)('1')
                  PsiElement(,)(',')
                  PsiErrorElement:<expr> expected, got '}'
                    <empty list>
            PsiWhiteSpace(' ')
            PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsBlockExprImpl(BLOCK_EXPR)
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsCallExprImpl(CALL_EXPR)
                RsPathExprImpl(PATH_EXPR)
                  RsPathImpl(PATH)
                    PsiElement(identifier)('foo9')
                RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
                  PsiElement(()('(')
                  PsiErrorElement:<expr> expected, got '}'
                    <empty list>
            PsiWhiteSpace(' ')
            PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo10')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(INTEGER_LITERAL)('1')
            PsiElement(,)(',')
            PsiErrorElement:<expr> expected, got 'fn'
              <empty list>
      PsiWhiteSpace('\n    ')
      RsFunctionImpl(FUNCTION)
        PsiElement(fn)('fn')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('a')
        RsValueParameterListImpl(VALUE_PARAMETER_LIST)
          PsiElement(()('(')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        RsBlockImpl(BLOCK)
          PsiElement({)('{')
          PsiElement(})('}')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo11')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            PsiErrorElement:<expr> expected, got 'fn'
              <empty list>
      PsiWhiteSpace('\n    ')
      RsFunctionImpl(FUNCTION)
        PsiElement(fn)('fn')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('a')
        RsValueParameterListImpl(VALUE_PARAMETER_LIST)
          PsiElement(()('(')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        RsBlockImpl(BLOCK)
          PsiElement({)('{')
          PsiElement(})('}')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('foo12')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLambdaExprImpl(LAMBDA_EXPR)
              RsValueParameterListImpl(VALUE_PARAMETER_LIST)
                PsiElement(|)('|')
                PsiElement(|)('|')
              PsiErrorElement:'->' or <expr> expected, got ')'
                <empty list>
            PsiWhiteSpace(' ')
            PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiErrorElement:<pattern> expected, got ';'
                <empty list>
        PsiWhiteSpace(' ')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsLetExprImpl(LET_EXPR)
              PsiElement(let)('let')
              PsiErrorElement:<pattern> expected, got ';'
                <empty list>
        PsiWhiteSpace(' ')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
