3 pub(crate) fn strip_item(mut item
: Item
) -> Item
{
4 if !matches
!(*item
.kind
, StrippedItem(..)) {
5 item
.kind
= box StrippedItem(item
.kind
);
10 pub(crate) trait DocFolder
: Sized
{
11 fn fold_item(&mut self, item
: Item
) -> Option
<Item
> {
12 Some(self.fold_item_recur(item
))
16 fn fold_inner_recur(&mut self, kind
: ItemKind
) -> ItemKind
{
18 StrippedItem(..) => unreachable
!(),
19 ModuleItem(i
) => ModuleItem(self.fold_mod(i
)),
20 StructItem(mut i
) => {
21 i
.fields
= i
.fields
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
25 i
.fields
= i
.fields
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
29 i
.variants
= i
.variants
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
33 i
.items
= i
.items
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
37 i
.items
= i
.items
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
40 VariantItem(i
) => match i
{
41 Variant
::Struct(mut j
) => {
42 j
.fields
= j
.fields
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
43 VariantItem(Variant
::Struct(j
))
45 Variant
::Tuple(fields
) => {
46 let fields
= fields
.into_iter().filter_map(|x
| self.fold_item(x
)).collect();
47 VariantItem(Variant
::Tuple(fields
))
49 Variant
::CLike
=> VariantItem(Variant
::CLike
),
51 ExternCrateItem { src: _ }
62 | ForeignFunctionItem(_
)
63 | ForeignStaticItem(_
)
68 | TyAssocConstItem(..)
72 | KeywordItem(_
) => kind
,
77 fn fold_item_recur(&mut self, mut item
: Item
) -> Item
{
78 item
.kind
= box match *item
.kind
{
79 StrippedItem(box i
) => StrippedItem(box self.fold_inner_recur(i
)),
80 _
=> self.fold_inner_recur(*item
.kind
),
85 fn fold_mod(&mut self, m
: Module
) -> Module
{
88 items
: m
.items
.into_iter().filter_map(|i
| self.fold_item(i
)).collect(),
92 fn fold_crate(&mut self, mut c
: Crate
) -> Crate
{
93 c
.module
= self.fold_item(c
.module
).unwrap();
95 let external_traits
= { std::mem::take(&mut *c.external_traits.borrow_mut()) }
;
96 for (k
, mut v
) in external_traits
{
97 v
.trait_
.items
= v
.trait_
.items
.into_iter().filter_map(|i
| self.fold_item(i
)).collect();
98 c
.external_traits
.borrow_mut().insert(k
, v
);