@@ -44,11 +44,7 @@ fn doc_meta(
44
44
* doc attribute
45
45
*/
46
46
47
- let doc_attrs = attr::find_attrs_by_name(attrs, ~" doc") ;
48
- let doc_metas = do doc_attrs. map |attr| {
49
- attr:: attr_meta ( attr:: desugar_doc_attr ( attr) )
50
- } ;
51
-
47
+ let doc_metas = doc_metas(attrs);
52
48
if vec::is_not_empty(doc_metas) {
53
49
if vec::len(doc_metas) != 1u {
54
50
warn!(" ignoring %u doc attributes", vec:: len ( doc_metas) - 1 u) ;
@@ -57,6 +53,19 @@ fn doc_meta(
57
53
} else {
58
54
None
59
55
}
56
+
57
+ }
58
+
59
+ fn doc_metas (
60
+ attrs : ~[ ast:: attribute ]
61
+ ) -> ~[ @ast:: meta_item ] {
62
+
63
+ let doc_attrs = attr:: find_attrs_by_name ( attrs, ~"doc") ;
64
+ let doc_metas = do doc_attrs. map |attr| {
65
+ attr:: attr_meta ( attr:: desugar_doc_attr ( attr) )
66
+ } ;
67
+
68
+ return doc_metas;
60
69
}
61
70
62
71
fn parse_crate ( attrs : ~[ ast:: attribute ] ) -> CrateAttrs {
@@ -117,18 +126,15 @@ fn parse_desc_should_parse_simple_doc_attributes() {
117
126
}
118
127
119
128
fn parse_hidden ( attrs : ~[ ast:: attribute ] ) -> bool {
120
- match doc_meta ( attrs) {
121
- Some ( meta) => {
129
+ do doc_metas ( attrs) . find |meta| {
122
130
match attr:: get_meta_item_list ( meta) {
123
131
Some ( metas) => {
124
132
let hiddens = attr:: find_meta_items_by_name ( metas, ~"hidden") ;
125
133
vec:: is_not_empty ( hiddens)
126
134
}
127
135
None => false
128
136
}
129
- }
130
- None => false
131
- }
137
+ } . is_some ( )
132
138
}
133
139
134
140
#[ test]
@@ -138,6 +144,13 @@ fn should_parse_hidden_attribute() {
138
144
assert parse_hidden ( attrs) == true ;
139
145
}
140
146
147
+ #[ test]
148
+ fn should_parse_hidden_attribute_with_other_docs ( ) {
149
+ let source = ~"#[ doc = \"foo\" ] #[ doc( hidden) ] #[ doc = \"foo\" ] ";
150
+ let attrs = test::parse_attributes(source);
151
+ assert parse_hidden(attrs) == true;
152
+ }
153
+
141
154
#[test]
142
155
fn should_not_parse_non_hidden_attribute() {
143
156
let source = ~" #[ doc = \"\" ] ";
0 commit comments