FILE
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('add')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('y')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsPathTypeImpl(PATH_TYPE)
        RsPathImpl(PATH)
          PsiElement(identifier)('i32')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n  ')
      RsExprStmtImpl(EXPR_STMT)
        RsRetExprImpl(RET_EXPR)
          PsiElement(return)('return')
          PsiWhiteSpace(' ')
          RsBinaryExprImpl(BINARY_EXPR)
            RsPathExprImpl(PATH_EXPR)
              RsPathImpl(PATH)
                PsiElement(identifier)('x')
            PsiWhiteSpace(' ')
            RsBinaryOpImpl(BINARY_OP)
              PsiElement(+)('+')
            PsiWhiteSpace(' ')
            RsPathExprImpl(PATH_EXPR)
              RsPathImpl(PATH)
                PsiElement(identifier)('y')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('mul')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('y')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsPathTypeImpl(PATH_TYPE)
        RsPathImpl(PATH)
          PsiElement(identifier)('i32')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n  ')
      RsExprStmtImpl(EXPR_STMT)
        RsBinaryExprImpl(BINARY_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('x')
          PsiWhiteSpace(' ')
          RsBinaryOpImpl(BINARY_OP)
            PsiElement(*)('*')
          PsiWhiteSpace(' ')
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('y')
        PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('id')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('x')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiElement(,)(',')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsPathTypeImpl(PATH_TYPE)
        RsPathImpl(PATH)
          PsiElement(identifier)('i32')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsPathExprImpl(PATH_EXPR)
          RsPathImpl(PATH)
            PsiElement(identifier)('x')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('constant')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsPathTypeImpl(PATH_TYPE)
        RsPathImpl(PATH)
          PsiElement(identifier)('i32')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsLitExprImpl(LIT_EXPR)
          PsiElement(INTEGER_LITERAL)('92')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(const)('const')
    PsiWhiteSpace('        ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('a')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsUnitTypeImpl(UNIT_TYPE)
        PsiElement(()('(')
        PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsUnitExprImpl(UNIT_EXPR)
          PsiElement(()('(')
          PsiElement())(')')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(const)('const')
    PsiWhiteSpace(' ')
    PsiElement(unsafe)('unsafe')
    PsiWhiteSpace(' ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('b')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsUnitTypeImpl(UNIT_TYPE)
        PsiElement(()('(')
        PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsUnitExprImpl(UNIT_EXPR)
          PsiElement(()('(')
          PsiElement())(')')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('diverging')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsRetTypeImpl(RET_TYPE)
      PsiElement(->)('->')
      PsiWhiteSpace(' ')
      RsNeverTypeImpl(NEVER_TYPE)
        PsiElement(!)('!')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace(' ')
      RsExprStmtImpl(EXPR_STMT)
        RsCallExprImpl(CALL_EXPR)
          RsPathExprImpl(PATH_EXPR)
            RsPathImpl(PATH)
              PsiElement(identifier)('panic')
          RsValueArgumentListImpl(VALUE_ARGUMENT_LIST)
            PsiElement(()('(')
            RsLitExprImpl(LIT_EXPR)
              PsiElement(STRING_LITERAL)('"! is a type"')
            PsiElement())(')')
      PsiWhiteSpace(' ')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(unsafe)('unsafe')
    PsiWhiteSpace(' ')
    RsExternAbiImpl(EXTERN_ABI)
      PsiElement(extern)('extern')
      PsiWhiteSpace(' ')
      RsLitExprImpl(LIT_EXPR)
        PsiElement(STRING_LITERAL)('"C"')
    PsiWhiteSpace(' ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('ext_fn1')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('a')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('bool')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsVariadicImpl(VARIADIC)
        PsiElement(...)('...')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(unsafe)('unsafe')
    PsiWhiteSpace(' ')
    RsExternAbiImpl(EXTERN_ABI)
      PsiElement(extern)('extern')
      PsiWhiteSpace(' ')
      RsLitExprImpl(LIT_EXPR)
        PsiElement(STRING_LITERAL)('"C"')
    PsiWhiteSpace(' ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('ext_fn2')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('a')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('bool')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsVariadicImpl(VARIADIC)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('args')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        PsiElement(...)('...')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(unsafe)('unsafe')
    PsiWhiteSpace(' ')
    RsExternAbiImpl(EXTERN_ABI)
      PsiElement(extern)('extern')
      PsiWhiteSpace(' ')
      RsLitExprImpl(LIT_EXPR)
        PsiElement(STRING_LITERAL)('"C"')
    PsiWhiteSpace(' ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('ext_fn3')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('a')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('bool')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsVariadicImpl(VARIADIC)
        PsiElement(...)('...')
      PsiElement(,)(',')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n')
  RsFunctionImpl(FUNCTION)
    PsiElement(unsafe)('unsafe')
    PsiWhiteSpace(' ')
    RsExternAbiImpl(EXTERN_ABI)
      PsiElement(extern)('extern')
      PsiWhiteSpace(' ')
      RsLitExprImpl(LIT_EXPR)
        PsiElement(STRING_LITERAL)('"C"')
    PsiWhiteSpace(' ')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('ext_fn4')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      RsValueParameterImpl(VALUE_PARAMETER)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('a')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('bool')
      PsiElement(,)(',')
      PsiWhiteSpace(' ')
      RsVariadicImpl(VARIADIC)
        RsPatIdentImpl(PAT_IDENT)
          RsPatBindingImpl(PAT_BINDING)
            PsiElement(identifier)('args')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        PsiElement(...)('...')
      PsiElement(,)(',')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
