9
9
// except according to those terms.
10
10
11
11
use clean:: * ;
12
- use std:: collections:: HashMap ;
13
- use std:: mem:: { replace, swap} ;
14
12
15
13
pub trait DocFolder : Sized {
16
14
fn fold_item ( & mut self , item : Item ) -> Option < Item > {
@@ -20,42 +18,36 @@ pub trait DocFolder : Sized {
20
18
/// don't override!
21
19
fn fold_item_recur ( & mut self , item : Item ) -> Option < Item > {
22
20
let Item { attrs, name, source, visibility, def_id, inner, stability, deprecation } = item;
23
- let inner = inner;
24
21
let inner = match inner {
25
22
StructItem ( mut i) => {
26
- let mut foo = Vec :: new ( ) ; swap ( & mut foo, & mut i. fields ) ;
27
- let num_fields = foo. len ( ) ;
28
- i. fields . extend ( foo. into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) ) ;
23
+ let num_fields = i. fields . len ( ) ;
24
+ i. fields = i. fields . into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) . collect ( ) ;
29
25
i. fields_stripped |= num_fields != i. fields . len ( ) ;
30
26
StructItem ( i)
31
27
} ,
32
28
ModuleItem ( i) => {
33
29
ModuleItem ( self . fold_mod ( i) )
34
30
} ,
35
31
EnumItem ( mut i) => {
36
- let mut foo = Vec :: new ( ) ; swap ( & mut foo, & mut i. variants ) ;
37
- let num_variants = foo. len ( ) ;
38
- i. variants . extend ( foo. into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) ) ;
32
+ let num_variants = i. variants . len ( ) ;
33
+ i. variants = i. variants . into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) . collect ( ) ;
39
34
i. variants_stripped |= num_variants != i. variants . len ( ) ;
40
35
EnumItem ( i)
41
36
} ,
42
37
TraitItem ( mut i) => {
43
- let mut foo = Vec :: new ( ) ; swap ( & mut foo, & mut i. items ) ;
44
- i. items . extend ( foo. into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) ) ;
38
+ i. items = i. items . into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) . collect ( ) ;
45
39
TraitItem ( i)
46
40
} ,
47
41
ImplItem ( mut i) => {
48
- let mut foo = Vec :: new ( ) ; swap ( & mut foo, & mut i. items ) ;
49
- i. items . extend ( foo. into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) ) ;
42
+ i. items = i. items . into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) . collect ( ) ;
50
43
ImplItem ( i)
51
44
} ,
52
45
VariantItem ( i) => {
53
46
let i2 = i. clone ( ) ; // this clone is small
54
47
match i. kind {
55
48
StructVariant ( mut j) => {
56
- let mut foo = Vec :: new ( ) ; swap ( & mut foo, & mut j. fields ) ;
57
- let num_fields = foo. len ( ) ;
58
- j. fields . extend ( foo. into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) ) ;
49
+ let num_fields = j. fields . len ( ) ;
50
+ j. fields = j. fields . into_iter ( ) . filter_map ( |x| self . fold_item ( x) ) . collect ( ) ;
59
51
j. fields_stripped |= num_fields != j. fields . len ( ) ;
60
52
VariantItem ( Variant { kind : StructVariant ( j) , ..i2} )
61
53
} ,
@@ -78,17 +70,13 @@ pub trait DocFolder : Sized {
78
70
}
79
71
80
72
fn fold_crate ( & mut self , mut c : Crate ) -> Crate {
81
- c. module = match replace ( & mut c. module , None ) {
82
- Some ( module) => self . fold_item ( module) , None => None
83
- } ;
84
-
85
- let external_traits = replace ( & mut c. external_traits , HashMap :: new ( ) ) ;
86
- c. external_traits = external_traits. into_iter ( ) . map ( |( k, mut v) | {
87
- let items = replace ( & mut v. items , Vec :: new ( ) ) ;
88
- v. items = items. into_iter ( ) . filter_map ( |i| self . fold_item ( i) )
89
- . collect ( ) ;
73
+ c. module = c. module . and_then ( |module| {
74
+ self . fold_item ( module)
75
+ } ) ;
76
+ c. external_traits = c. external_traits . into_iter ( ) . map ( |( k, mut v) | {
77
+ v. items = v. items . into_iter ( ) . filter_map ( |i| self . fold_item ( i) ) . collect ( ) ;
90
78
( k, v)
91
79
} ) . collect ( ) ;
92
- return c ;
80
+ c
93
81
}
94
82
}
0 commit comments