FILE
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('main')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('0')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('0')
        PsiWhiteSpace(' ')
        RsLetElseBranchImpl(LET_ELSE_BRANCH)
          PsiElement(else)('else')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
            PsiWhiteSpace(' ')
            PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n    ')
      RsLetDeclImpl(LET_DECL)
        PsiElement(let)('let')
        PsiWhiteSpace(' ')
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiWhiteSpace(' ')
        PsiElement(=)('=')
        PsiWhiteSpace(' ')
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('0')
      PsiWhiteSpace(' ')
      PsiElement(else)('else')
      PsiErrorElement:'{' expected, got 'if'
        <empty list>
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsIfExprImpl(IF_EXPR)
          PsiElement(if)('if')
          PsiWhiteSpace(' ')
          RsConditionImpl(CONDITION)
            RsBinaryExprImpl(BINARY_EXPR)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
              PsiWhiteSpace(' ')
              RsBinaryOpImpl(BINARY_OP)
                PsiElement(<)('<')
              PsiWhiteSpace(' ')
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('2')
          PsiWhiteSpace(' ')
          RsBlockImpl(BLOCK)
            PsiElement({)('{')
            PsiWhiteSpace(' ')
            RsExprStmtImpl(EXPR_STMT)
              RsLitExprImpl(LIT_EXPR)
                PsiElement(INTEGER_LITERAL)('1')
            PsiWhiteSpace(' ')
            PsiElement(})('}')
          PsiWhiteSpace(' ')
          RsElseBranchImpl(ELSE_BRANCH)
            PsiElement(else)('else')
            PsiWhiteSpace(' ')
            RsBlockImpl(BLOCK)
              PsiElement({)('{')
              PsiWhiteSpace(' ')
              RsExprStmtImpl(EXPR_STMT)
                RsLitExprImpl(LIT_EXPR)
                  PsiElement(INTEGER_LITERAL)('2')
              PsiWhiteSpace(' ')
              PsiElement(})('}')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
