@@ -16,22 +16,25 @@ type fold_crate<T> = fn~(fold: fold<T>, doc: doc::cratedoc) -> doc::cratedoc;
16
16
type fold_mod < T > = fn ~( fold : fold < T > , doc : doc:: moddoc ) -> doc:: moddoc ;
17
17
type fold_fn < T > = fn ~( fold : fold < T > , doc : doc:: fndoc ) -> doc:: fndoc ;
18
18
type fold_const < T > = fn ~( fold : fold < T > , doc : doc:: constdoc ) -> doc:: constdoc ;
19
+ type fold_enum < T > = fn ~( fold : fold < T > , doc : doc:: enumdoc ) -> doc:: enumdoc ;
19
20
type fold_modlist < T > = fn ~( fold : fold < T > , list : doc:: modlist ) -> doc:: modlist ;
20
21
type fold_fnlist < T > = fn ~( fold : fold < T > , list : doc:: fnlist ) -> doc:: fnlist ;
21
22
type fold_constlist < T > = fn ~(
22
- fold : fold < T > ,
23
- list : doc :: constlist
24
- ) -> doc:: constlist ;
23
+ fold : fold < T > , list : doc :: constlist ) -> doc :: constlist ;
24
+ type fold_enumlist < T > = fn ~ (
25
+ fold : fold < T > , list : doc :: enumlist ) -> doc:: enumlist ;
25
26
26
27
type t < T > = {
27
28
ctxt : T ,
28
29
fold_crate : fold_crate < T > ,
29
30
fold_mod : fold_mod < T > ,
30
31
fold_fn : fold_fn < T > ,
31
32
fold_const : fold_const < T > ,
33
+ fold_enum : fold_enum < T > ,
32
34
fold_modlist : fold_modlist < T > ,
33
35
fold_fnlist : fold_fnlist < T > ,
34
- fold_constlist : fold_constlist < T >
36
+ fold_constlist : fold_constlist < T > ,
37
+ fold_enumlist : fold_enumlist < T >
35
38
} ;
36
39
37
40
@@ -43,19 +46,23 @@ fn mk_fold<T:copy>(
43
46
fold_mod : fold_mod < T > ,
44
47
fold_fn : fold_fn < T > ,
45
48
fold_const : fold_const < T > ,
49
+ fold_enum : fold_enum < T > ,
46
50
fold_modlist : fold_modlist < T > ,
47
51
fold_fnlist : fold_fnlist < T > ,
48
- fold_constlist : fold_constlist < T >
52
+ fold_constlist : fold_constlist < T > ,
53
+ fold_enumlist : fold_enumlist < T >
49
54
) -> fold < T > {
50
55
fold ( {
51
56
ctxt: ctxt,
52
57
fold_crate: fold_crate,
53
58
fold_mod: fold_mod,
54
59
fold_fn: fold_fn,
55
60
fold_const: fold_const,
61
+ fold_enum: fold_enum,
56
62
fold_modlist: fold_modlist,
57
63
fold_fnlist: fold_fnlist,
58
- fold_constlist: fold_constlist
64
+ fold_constlist: fold_constlist,
65
+ fold_enumlist: fold_enumlist
59
66
} )
60
67
}
61
68
@@ -66,9 +73,11 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
66
73
{ |f, d| default_seq_fold_mod ( f, d) } ,
67
74
{ |f, d| default_seq_fold_fn ( f, d) } ,
68
75
{ |f, d| default_seq_fold_const ( f, d) } ,
76
+ { |f, d| default_seq_fold_enum ( f, d) } ,
69
77
{ |f, d| default_seq_fold_modlist ( f, d) } ,
70
78
{ |f, d| default_seq_fold_fnlist ( f, d) } ,
71
- { |f, d| default_seq_fold_constlist ( f, d) }
79
+ { |f, d| default_seq_fold_constlist ( f, d) } ,
80
+ { |f, d| default_seq_fold_enumlist ( f, d) }
72
81
)
73
82
}
74
83
@@ -107,6 +116,13 @@ fn default_seq_fold_const<T>(
107
116
doc
108
117
}
109
118
119
+ fn default_seq_fold_enum < T > (
120
+ _fold : fold < T > ,
121
+ doc : doc:: enumdoc
122
+ ) -> doc:: enumdoc {
123
+ doc
124
+ }
125
+
110
126
fn default_seq_fold_modlist < T > (
111
127
fold : fold < T > ,
112
128
list : doc:: modlist
@@ -134,6 +150,15 @@ fn default_seq_fold_constlist<T>(
134
150
} )
135
151
}
136
152
153
+ fn default_seq_fold_enumlist < T > (
154
+ fold : fold < T > ,
155
+ list : doc:: enumlist
156
+ ) -> doc:: enumlist {
157
+ doc:: enumlist ( vec:: map ( * list) { |doc|
158
+ fold. fold_enum ( fold, doc)
159
+ } )
160
+ }
161
+
137
162
#[ test]
138
163
fn default_fold_should_produce_same_doc ( ) {
139
164
let source = "mod a { fn b() { } mod c { fn d() { } } }" ;
@@ -152,4 +177,14 @@ fn default_fold_should_produce_same_consts() {
152
177
let fld = default_seq_fold ( ( ) ) ;
153
178
let folded = fld. fold_crate ( fld, doc) ;
154
179
assert doc == folded;
180
+ }
181
+
182
+ #[ test]
183
+ fn default_fold_should_produce_same_enums ( ) {
184
+ let source = "enum a { b }" ;
185
+ let ast = parse:: from_str ( source) ;
186
+ let doc = extract:: extract ( ast, "" ) ;
187
+ let fld = default_seq_fold ( ( ) ) ;
188
+ let folded = fld. fold_crate ( fld, doc) ;
189
+ assert doc == folded;
155
190
}
0 commit comments