FILE
  RsFunctionImpl(FUNCTION)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('Does useful things')
      PsiWhiteSpace('\n')
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('Really useful')
    PsiWhiteSpace('\n')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('documented_function')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsFunctionImpl(FUNCTION)
        PsiComment(<OUTER_EOL_DOC_COMMENT>)
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('inner items can have docs too!')
        PsiWhiteSpace('\n    ')
        PsiElement(fn)('fn')
        PsiWhiteSpace(' ')
        PsiElement(identifier)('foo')
        RsValueParameterListImpl(VALUE_PARAMETER_LIST)
          PsiElement(()('(')
          PsiElement())(')')
        PsiWhiteSpace(' ')
        RsBlockImpl(BLOCK)
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          PsiElement(})('}')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsModItemImpl(MOD_ITEM)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('doc')
    PsiWhiteSpace('\n')
    PsiElement(mod)('mod')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('m')
    PsiWhiteSpace(' ')
    PsiElement({)('{')
    PsiWhiteSpace('\n    ')
    PsiComment(<INNER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('//!')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('This is module docs')
      PsiWhiteSpace('\n    ')
      PsiElement(<DOC_GAP>)('//!')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('It can span more the one line,')
      PsiWhiteSpace('\n    ')
      PsiElement(<DOC_GAP>)('//!')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('like this.')
    PsiWhiteSpace('\n    ')
    RsFunctionImpl(FUNCTION)
      PsiElement(fn)('fn')
      PsiWhiteSpace(' ')
      PsiElement(identifier)('undocumented_function')
      RsValueParameterListImpl(VALUE_PARAMETER_LIST)
        PsiElement(()('(')
        PsiElement())(')')
      PsiWhiteSpace(' ')
      RsBlockImpl(BLOCK)
        PsiElement({)('{')
        PsiElement(})('}')
    PsiWhiteSpace('\n\n    ')
    RsFunctionImpl(FUNCTION)
      PsiComment(<OUTER_EOL_DOC_COMMENT>)
        PsiElement(<DOC_GAP>)('///')
        PsiWhiteSpace(' ')
        PsiElement(<DOC_DATA>)('Does other things')
      PsiWhiteSpace('\n    ')
      PsiElement(fn)('fn')
      PsiWhiteSpace(' ')
      PsiElement(identifier)('documented_function')
      RsValueParameterListImpl(VALUE_PARAMETER_LIST)
        PsiElement(()('(')
        PsiElement())(')')
      PsiWhiteSpace(' ')
      RsBlockImpl(BLOCK)
        PsiElement({)('{')
        PsiElement(})('}')
    PsiWhiteSpace('\n')
    PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsStructItemImpl(STRUCT_ITEM)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('Can mix doc comments and outer attributes')
    PsiWhiteSpace('\n')
    RsOuterAttrImpl(OUTER_ATTR)
      PsiElement(#)('#')
      PsiElement([)('[')
      RsMetaItemImpl(META_ITEM)
        RsPathImpl(PATH)
          PsiElement(identifier)('cfg')
        RsMetaItemArgsImpl(META_ITEM_ARGS)
          PsiElement(()('(')
          RsMetaItemImpl(META_ITEM)
            RsPathImpl(PATH)
              PsiElement(identifier)('test')
          PsiElement())(')')
      PsiElement(])(']')
    PsiWhiteSpace('\n')
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('foo')
    PsiWhiteSpace('\n')
    PsiElement(struct)('struct')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('S')
    PsiWhiteSpace(' ')
    RsBlockFieldsImpl(BLOCK_FIELDS)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsNamedFieldDeclImpl(NAMED_FIELD_DECL)
        PsiComment(<OUTER_EOL_DOC_COMMENT>)
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('Fields can have docs,')
          PsiWhiteSpace('\n    ')
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('sometimes long ones.')
        PsiWhiteSpace('\n    ')
        PsiElement(identifier)('field')
        PsiElement(:)(':')
        PsiWhiteSpace(' ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('f32')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsStructItemImpl(STRUCT_ITEM)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('documentation')
    PsiWhiteSpace('\n')
    PsiComment(<EOL_COMMENT>)('// simple comments do not interfer with doc comments')
    PsiWhiteSpace('\n')
    PsiElement(struct)('struct')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('T')
    PsiWhiteSpace(' ')
    RsTupleFieldsImpl(TUPLE_FIELDS)
      PsiElement(()('(')
      PsiWhiteSpace('\n  ')
      RsTupleFieldDeclImpl(TUPLE_FIELD_DECL)
        PsiComment(<OUTER_EOL_DOC_COMMENT>)
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('Even for tuple structs!')
        PsiWhiteSpace('\n  ')
        RsPathTypeImpl(PATH_TYPE)
          RsPathImpl(PATH)
            PsiElement(identifier)('i32')
      PsiWhiteSpace('\n')
      PsiElement())(')')
    PsiElement(;)(';')
  PsiWhiteSpace('\n\n')
  RsEnumItemImpl(ENUM_ITEM)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('doc')
    PsiWhiteSpace('\n')
    PsiElement(enum)('enum')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('E')
    PsiWhiteSpace(' ')
    RsEnumBodyImpl(ENUM_BODY)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsEnumVariantImpl(ENUM_VARIANT)
        PsiComment(<OUTER_EOL_DOC_COMMENT>)
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('doc')
        PsiWhiteSpace('\n    ')
        PsiElement(identifier)('Foo')
      PsiElement(,)(',')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsEnumItemImpl(ENUM_ITEM)
    PsiElement(enum)('enum')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('ES')
    PsiWhiteSpace(' ')
    RsEnumBodyImpl(ENUM_BODY)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsEnumVariantImpl(ENUM_VARIANT)
        PsiComment(<OUTER_EOL_DOC_COMMENT>)
          PsiElement(<DOC_GAP>)('///')
          PsiWhiteSpace(' ')
          PsiElement(<DOC_DATA>)('doc')
        PsiWhiteSpace('\n    ')
        PsiElement(identifier)('Foo')
        PsiWhiteSpace(' ')
        RsBlockFieldsImpl(BLOCK_FIELDS)
          PsiElement({)('{')
          PsiWhiteSpace('\n        ')
          RsNamedFieldDeclImpl(NAMED_FIELD_DECL)
            PsiComment(<OUTER_EOL_DOC_COMMENT>)
              PsiElement(<DOC_GAP>)('///')
              PsiWhiteSpace(' ')
              PsiElement(<DOC_DATA>)('field doc')
            PsiWhiteSpace('\n        ')
            PsiElement(identifier)('field')
            PsiElement(:)(':')
            PsiWhiteSpace(' ')
            RsPathTypeImpl(PATH_TYPE)
              RsPathImpl(PATH)
                PsiElement(identifier)('usize')
          PsiWhiteSpace('\n    ')
          PsiElement(})('}')
      PsiElement(,)(',')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsForeignModItemImpl(FOREIGN_MOD_ITEM)
    RsExternAbiImpl(EXTERN_ABI)
      PsiElement(extern)('extern')
    PsiWhiteSpace(' ')
    PsiElement({)('{')
    PsiWhiteSpace('\n    ')
    RsFunctionImpl(FUNCTION)
      PsiComment(<OUTER_EOL_DOC_COMMENT>)
        PsiElement(<DOC_GAP>)('///')
        PsiWhiteSpace(' ')
        PsiElement(<DOC_DATA>)('Doc')
      PsiWhiteSpace('\n    ')
      PsiElement(fn)('fn')
      PsiWhiteSpace(' ')
      PsiElement(identifier)('foo')
      RsValueParameterListImpl(VALUE_PARAMETER_LIST)
        PsiElement(()('(')
        PsiElement())(')')
      PsiElement(;)(';')
    PsiWhiteSpace('\n\n    ')
    RsConstantImpl(CONSTANT)
      PsiComment(<OUTER_EOL_DOC_COMMENT>)
        PsiElement(<DOC_GAP>)('///')
        PsiWhiteSpace(' ')
        PsiElement(<DOC_DATA>)('Doc')
      PsiWhiteSpace('\n    ')
      PsiElement(static)('static')
      PsiWhiteSpace(' ')
      PsiElement(identifier)('errno')
      PsiElement(:)(':')
      PsiWhiteSpace(' ')
      RsPathTypeImpl(PATH_TYPE)
        RsPathImpl(PATH)
          PsiElement(identifier)('i32')
      PsiElement(;)(';')
    PsiWhiteSpace('\n')
    PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  RsMacroImpl(MACRO)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('doc')
    PsiWhiteSpace('\n')
    PsiElement(identifier)('macro_rules')
    PsiElement(!)('!')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('makro')
    PsiWhiteSpace(' ')
    RsMacroBodyImpl(MACRO_BODY)
      PsiElement({)('{')
      PsiWhiteSpace('\n    ')
      RsMacroCaseImpl(MACRO_CASE)
        RsMacroPatternImpl(MACRO_PATTERN)
          PsiElement(()('(')
          RsMacroPatternContentsImpl(MACRO_PATTERN_CONTENTS)
            <empty list>
          PsiElement())(')')
        PsiWhiteSpace(' ')
        PsiElement(=>)('=>')
        PsiWhiteSpace(' ')
        RsMacroExpansionImpl(MACRO_EXPANSION)
          PsiElement({)('{')
          PsiWhiteSpace(' ')
          RsMacroExpansionContentsImpl(MACRO_EXPANSION_CONTENTS)
            <empty list>
          PsiElement(})('}')
      PsiElement(;)(';')
      PsiWhiteSpace('\n')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  PsiComment(<EOL_COMMENT>)('////////////////////////////////')
  PsiWhiteSpace('\n')
  PsiComment(<EOL_COMMENT>)('// This is not a doc comment ///')
  PsiWhiteSpace('\n')
  PsiComment(<EOL_COMMENT>)('////////////////////////////////')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace('\n')
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace('\n')
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('foo')
      PsiWhiteSpace('\n')
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace('\n')
      PsiElement(<DOC_GAP>)('///')
    PsiWhiteSpace('\n')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('blanks')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n')
  PsiComment(<EOL_COMMENT>)('// A blank line after non-doc comment detaches it from item.')
  PsiWhiteSpace('\n\n')
  RsFunctionImpl(FUNCTION)
    PsiComment(<EOL_COMMENT>)('// This multi-line')
    PsiWhiteSpace('\n')
    PsiComment(<EOL_COMMENT>)('// non-doc comment should be attached as well')
    PsiWhiteSpace('\n')
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('Blank lines after doc comments do not matter')
    PsiWhiteSpace('\n\n')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('foo')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
  PsiWhiteSpace('\n\n\n')
  RsFunctionImpl(FUNCTION)
    PsiComment(<OUTER_EOL_DOC_COMMENT>)
      PsiElement(<DOC_GAP>)('///')
      PsiWhiteSpace(' ')
      PsiElement(<DOC_DATA>)('Non-doc comments after a doc comment do not matter.')
    PsiWhiteSpace('\n')
    PsiComment(<EOL_COMMENT>)('// Like this one!')
    PsiWhiteSpace('\n')
    PsiElement(fn)('fn')
    PsiWhiteSpace(' ')
    PsiElement(identifier)('bar')
    RsValueParameterListImpl(VALUE_PARAMETER_LIST)
      PsiElement(()('(')
      PsiElement())(')')
    PsiWhiteSpace(' ')
    RsBlockImpl(BLOCK)
      PsiElement({)('{')
      PsiElement(})('}')
