@@ -17,7 +17,8 @@ fn run(
17
17
) -> doc:: cratedoc {
18
18
let fold = fold:: fold ( {
19
19
fold_fn: fold_fn,
20
- fold_const: fold_const
20
+ fold_const: fold_const,
21
+ fold_enum: fold_enum
21
22
with * fold:: default_seq_fold ( srv)
22
23
} ) ;
23
24
fold. fold_crate ( fold, doc)
@@ -179,4 +180,45 @@ fn should_add_const_types() {
179
180
let doc = extract:: from_srv ( srv, "" ) ;
180
181
let doc = run ( srv, doc) ;
181
182
assert doc. topmod . consts [ 0 ] . ty == some ( "bool" ) ;
182
- }
183
+ }
184
+
185
+ fn fold_enum (
186
+ fold : fold:: fold < astsrv:: srv > ,
187
+ doc : doc:: enumdoc
188
+ ) -> doc:: enumdoc {
189
+ let srv = fold. ctxt ;
190
+
191
+ ~{
192
+ variants: vec:: map ( doc. variants ) { |variant|
193
+ let sig = astsrv:: exec ( srv) { |ctxt|
194
+ alt ctxt. map . get ( doc. id ) {
195
+ ast_map:: node_item ( @{
196
+ node: ast:: item_enum ( ast_variants, _) , _
197
+ } ) {
198
+ let ast_variant = option:: get (
199
+ vec:: find ( ast_variants) { |v|
200
+ v. node . name == variant. name
201
+ } ) ;
202
+
203
+ pprust:: variant_to_str ( ast_variant)
204
+ }
205
+ }
206
+ } ;
207
+
208
+ ~{
209
+ sig: some ( sig)
210
+ with * variant
211
+ }
212
+ }
213
+ with * doc
214
+ }
215
+ }
216
+
217
+ #[ test]
218
+ fn should_add_variant_sigs ( ) {
219
+ let source = "enum a { b(int) }" ;
220
+ let srv = astsrv:: mk_srv_from_str ( source) ;
221
+ let doc = extract:: from_srv ( srv, "" ) ;
222
+ let doc = run ( srv, doc) ;
223
+ assert doc. topmod . enums [ 0 ] . variants [ 0 ] . sig == some ( "b(int)" ) ;
224
+ }
0 commit comments