FILE
  PsiElement(identifier)('priv')
  PsiErrorElement:'!' or '::' expected, got 'fn'
    <empty list>
  PsiWhiteSpace(' ')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('bar')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsTraitItemImpl(TRAIT_ITEM)
    PsiElement(trait)('trait')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('Trait')
    PsiWhiteSpace(' ')
    RsMembersImpl(MEMBERS)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      PsiElement(identifier)('virtual')
      PsiErrorElement:'!' or '::' expected, got 'fn'
        <empty list>
      PsiWhiteSpace(' ')
      RsFunctionImpl(FUNCTION)
        PsiElement(fn)('fn')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('foo')
        RsValueParameterListImpl(VALUE_PARAMETER_LIST)
          PsiElement(()('(')
          PsiElement())(')')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsImplItemImpl(IMPL_ITEM)
    PsiElement(impl)('impl')
    PsiWhiteSpace(' ')
    RsTraitRefImpl(TRAIT_REF)
      RsPathImpl(PATH)
        PsiElement(identifier)('Trait')
    PsiWhiteSpace(' ')
    PsiElement(for)('for')
    PsiWhiteSpace(' ')
    RsPathTypeImpl(PATH_TYPE)
      RsPathImpl(PATH)
        PsiElement(identifier)('Sstruct')
    PsiWhiteSpace(' ')
    RsMembersImpl(MEMBERS)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      PsiElement(identifier)('override')
      PsiErrorElement:'!' or '::' expected, got 'type'
        <empty list>
      PsiWhiteSpace(' ')
      RsTypeAliasImpl(TYPE_ALIAS)
        PsiElement(type)('type')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('Type')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      PsiElement(identifier)('final')
      PsiErrorElement:'!' or '::' expected, got 'fn'
        <empty list>
      PsiWhiteSpace(' ')
      RsFunctionImpl(FUNCTION)
        PsiElement(fn)('fn')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('foo')
        RsValueParameterListImpl(VALUE_PARAMETER_LIST)
          PsiElement(()('(')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        RsBlockImpl(BLOCK)
          PsiElement({)('{')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsExprStmtImpl(EXPR_STMT)
        RsStructLiteralImpl(STRUCT_LITERAL)
          RsPathImpl(PATH)
            PsiElement(identifier)('do')
          PsiWhiteSpace(' ')
          RsStructLiteralBodyImpl(STRUCT_LITERAL_BODY)
            PsiElement({)('{')
            PsiElement(})('}')
        PsiErrorElement:'(', '+', '-', ';', <operator>, '[' or '}' expected, got 'while'
          <empty list>
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsWhileExprImpl(WHILE_EXPR)
          PsiElement(while)('while')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsParenExprImpl(PAREN_EXPR)
              PsiElement(()('(')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(BOOL_LITERAL)('true')
              PsiElement())(')')
          PsiErrorElement:'(', '+', '-', <operator>, '[' or '{' expected, got ';'
            <empty list>
        PsiElement(;)(';')
      PsiWhiteSpace('\n\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('a')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('typeof')
            RsValueParameterListImpl(VALUE_PARAMETER_LIST)
              PsiElement(()('(')
              PsiErrorElement:')' or <path parameter> expected, got '1'
                <empty list>
      RsExprStmtImpl(EXPR_STMT)
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('1')
        PsiErrorElement:'(', '+', '-', ';', <operator>, '[' or '}' expected, got ')'
          <empty list>
      PsiElement())(')')
      PsiWhiteSpace(' ')
      PsiElement(=)('=')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('1')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
