@@ -10,9 +10,9 @@ import rustc::front::attr;
10
10
import core:: tuple;
11
11
12
12
export crate_attrs, mod_attrs, fn_attrs, arg_attrs,
13
- const_attrs, enum_attrs, variant_attrs;
13
+ const_attrs, enum_attrs, variant_attrs, res_attrs ;
14
14
export parse_crate, parse_mod, parse_fn, parse_const,
15
- parse_enum, parse_variant;
15
+ parse_enum, parse_variant, parse_res ;
16
16
17
17
type crate_attrs = {
18
18
name : option < str >
@@ -50,6 +50,12 @@ type variant_attrs = {
50
50
desc : option < str >
51
51
} ;
52
52
53
+ type res_attrs = {
54
+ brief : option < str > ,
55
+ desc : option < str > ,
56
+ args : [ arg_attrs ]
57
+ } ;
58
+
53
59
#[ cfg( test) ]
54
60
mod test {
55
61
@@ -248,7 +254,19 @@ fn parse_fn_long_doc(
248
254
) -> fn_attrs {
249
255
let return = attr:: meta_item_value_from_list ( items, "return" ) ;
250
256
let failure = attr:: meta_item_value_from_list ( items, "failure" ) ;
251
- let args = alt attr:: meta_item_list_from_list ( items, "args" ) {
257
+ let args = parse_args ( items) ;
258
+
259
+ {
260
+ brief: brief,
261
+ desc: desc,
262
+ args: args,
263
+ return : return ,
264
+ failure: failure
265
+ }
266
+ }
267
+
268
+ fn parse_args ( items : [ @ast:: meta_item ] ) -> [ arg_attrs ] {
269
+ alt attr:: meta_item_list_from_list ( items, "args" ) {
252
270
some ( items) {
253
271
vec:: filter_map ( items) { |item|
254
272
option:: map ( attr:: name_value_str_pair ( item) ) { |pair|
@@ -260,14 +278,6 @@ fn parse_fn_long_doc(
260
278
}
261
279
}
262
280
none { [ ] }
263
- } ;
264
-
265
- {
266
- brief: brief,
267
- desc: desc,
268
- args: args,
269
- return : return ,
270
- failure: failure
271
281
}
272
282
}
273
283
@@ -417,3 +427,58 @@ fn should_parse_variant_long_doc() {
417
427
let attrs = parse_variant ( attrs) ;
418
428
assert attrs. desc == some ( "a" ) ;
419
429
}
430
+
431
+ fn parse_res (
432
+ attrs : [ ast:: attribute ]
433
+ ) -> res_attrs {
434
+
435
+ parse_short_doc_or (
436
+ attrs,
437
+ { |desc|
438
+ {
439
+ brief: none,
440
+ desc: desc,
441
+ args: [ ]
442
+ }
443
+ } ,
444
+ parse_res_long_doc
445
+ )
446
+ }
447
+
448
+ fn parse_res_long_doc (
449
+ items : [ @ast:: meta_item ] ,
450
+ brief : option < str > ,
451
+ desc : option < str >
452
+ ) -> res_attrs {
453
+ {
454
+ brief: brief,
455
+ desc: desc,
456
+ args: parse_args ( items)
457
+ }
458
+ }
459
+
460
+ #[ test]
461
+ fn should_parse_resource_short_desc ( ) {
462
+ let source = "#[doc = \" a\" ]" ;
463
+ let attrs = test:: parse_attributes ( source) ;
464
+ let attrs = parse_res ( attrs) ;
465
+ assert attrs. desc == some ( "a" ) ;
466
+ }
467
+
468
+ #[ test]
469
+ fn should_parse_resource_long_desc ( ) {
470
+ let source = "#[doc(brief = \" a\" , desc = \" b\" )]" ;
471
+ let attrs = test:: parse_attributes ( source) ;
472
+ let attrs = parse_res ( attrs) ;
473
+ assert attrs. brief == some ( "a" ) ;
474
+ assert attrs. desc == some ( "b" ) ;
475
+ }
476
+
477
+ #[ test]
478
+ fn shoulde_parse_resource_arg ( ) {
479
+ let source = "#[doc(args(a = \" b\" ))]" ;
480
+ let attrs = test:: parse_attributes ( source) ;
481
+ let attrs = parse_res ( attrs) ;
482
+ assert attrs. args [ 0 ] . name == "a" ;
483
+ assert attrs. args [ 0 ] . desc == "b" ;
484
+ }
0 commit comments