@@ -26,6 +26,12 @@ fn run(
26
26
) -> doc:: cratedoc {
27
27
fold_crate( f, d)
28
28
} ,
29
+ fold_mod : fn ~(
30
+ f: fold:: fold<astsrv:: srv>,
31
+ d: doc:: moddoc
32
+ ) -> doc:: moddoc {
33
+ fold_mod( f, d)
34
+ } ,
29
35
fold_fn : fn ~(
30
36
f: fold:: fold<astsrv:: srv>,
31
37
d: doc:: fndoc
@@ -68,6 +74,56 @@ fn should_replace_top_module_name_with_crate_name() {
68
74
assert doc. topmod . name == "bond" ;
69
75
}
70
76
77
+ fn fold_mod ( fold : fold:: fold < astsrv:: srv > , doc : doc:: moddoc ) -> doc:: moddoc {
78
+ let srv = fold. ctxt ;
79
+ let attrs = if doc. id == ast:: crate_node_id {
80
+ // This is the top-level mod, use the crate attributes
81
+ astsrv:: exec ( srv) { |ctxt|
82
+ attr_parser:: parse_mod ( ctxt. ast . node . attrs )
83
+ }
84
+ } else {
85
+ astsrv:: exec ( srv) { |ctxt|
86
+ let attrs = alt ctxt. map . get ( doc. id ) {
87
+ ast_map:: node_item ( item) { item. attrs }
88
+ } ;
89
+ attr_parser:: parse_mod ( attrs)
90
+ }
91
+ } ;
92
+ let doc = fold:: default_seq_fold_mod ( fold, doc) ;
93
+ ret merge_mod_attrs ( doc, attrs) ;
94
+
95
+ fn merge_mod_attrs (
96
+ doc : doc:: moddoc ,
97
+ attrs : attr_parser:: mod_attrs
98
+ ) -> doc:: moddoc {
99
+ ~{
100
+ brief: attrs. brief ,
101
+ desc: attrs. desc
102
+ with * doc
103
+ }
104
+ }
105
+ }
106
+
107
+ #[ test]
108
+ fn fold_mod_should_extract_mod_attributes ( ) {
109
+ let source = "#[doc = \" test\" ] mod a { }" ;
110
+ let srv = astsrv:: mk_srv_from_str ( source) ;
111
+ let doc = extract:: from_srv ( srv, "" ) ;
112
+ let fold = fold:: default_seq_fold ( srv) ;
113
+ let doc = fold_mod ( fold, doc. topmod . mods [ 0 ] ) ;
114
+ assert doc. desc == some ( "test" ) ;
115
+ }
116
+
117
+ #[ test]
118
+ fn fold_mod_should_extract_top_mod_attributes ( ) {
119
+ let source = "#[doc = \" test\" ];" ;
120
+ let srv = astsrv:: mk_srv_from_str ( source) ;
121
+ let doc = extract:: from_srv ( srv, "" ) ;
122
+ let fold = fold:: default_seq_fold ( srv) ;
123
+ let doc = fold_mod ( fold, doc. topmod ) ;
124
+ assert doc. desc == some ( "test" ) ;
125
+ }
126
+
71
127
fn fold_fn (
72
128
fold : fold:: fold < astsrv:: srv > ,
73
129
doc : doc:: fndoc
0 commit comments