@@ -23,7 +23,8 @@ fn run(
23
23
fold_crate: fold_crate,
24
24
fold_mod: fold_mod,
25
25
fold_fn: fold_fn,
26
- fold_const: fold_const
26
+ fold_const: fold_const,
27
+ fold_enum: fold_enum
27
28
with * fold:: default_seq_fold ( srv)
28
29
} ) ;
29
30
fold. fold_crate ( fold, doc)
@@ -249,3 +250,60 @@ fn fold_const_should_extract_docs() {
249
250
assert doc. brief == some ( "foo" ) ;
250
251
assert doc. desc == some ( "bar" ) ;
251
252
}
253
+
254
+ fn fold_enum (
255
+ fold : fold:: fold < astsrv:: srv > ,
256
+ doc : doc:: enumdoc
257
+ ) -> doc:: enumdoc {
258
+ let srv = fold. ctxt ;
259
+ let attrs = parse_item_attrs ( srv, doc. id , attr_parser:: parse_enum) ;
260
+
261
+ ~{
262
+ brief: attrs. brief ,
263
+ desc: attrs. desc ,
264
+ variants: vec:: map ( doc. variants ) { |variant|
265
+ let attrs = astsrv:: exec ( srv) { |ctxt|
266
+ alt ctxt. map . get ( doc. id ) {
267
+ ast_map:: node_item ( @{
268
+ node: ast:: item_enum ( ast_variants, _) , _
269
+ } ) {
270
+ let ast_variant = option:: get (
271
+ vec:: find ( ast_variants) { |v|
272
+ v. node . name == variant. name
273
+ } ) ;
274
+
275
+ attr_parser:: parse_variant ( ast_variant. node . attrs )
276
+ }
277
+ }
278
+ } ;
279
+
280
+ ~{
281
+ desc: attrs. desc
282
+ with * variant
283
+ }
284
+ }
285
+ with * doc
286
+ }
287
+ }
288
+
289
+ #[ test]
290
+ fn fold_enum_should_extract_docs ( ) {
291
+ let source = "#[doc(brief = \" a\" , desc = \" b\" )]\
292
+ enum a { v }";
293
+ let srv = astsrv:: mk_srv_from_str ( source) ;
294
+ let doc = extract:: from_srv ( srv, "" ) ;
295
+ let fold = fold:: default_seq_fold ( srv) ;
296
+ let doc = fold_enum ( fold, doc. topmod . enums [ 0 ] ) ;
297
+ assert doc. brief == some ( "a" ) ;
298
+ assert doc. desc == some ( "b" ) ;
299
+ }
300
+
301
+ #[ test]
302
+ fn fold_enum_should_extract_variant_docs ( ) {
303
+ let source = "enum a { #[doc = \" c\" ] v }" ;
304
+ let srv = astsrv:: mk_srv_from_str ( source) ;
305
+ let doc = extract:: from_srv ( srv, "" ) ;
306
+ let fold = fold:: default_seq_fold ( srv) ;
307
+ let doc = fold_enum ( fold, doc. topmod . enums [ 0 ] ) ;
308
+ assert doc. variants [ 0 ] . desc == some ( "c" ) ;
309
+ }
0 commit comments