about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-09-19 18:50:41 -0700
committerBrian Anderson <banderson@mozilla.com>2012-09-19 19:08:32 -0700
commit6cf496ce97cc466bfa92b7ed7190a759cd9c1c33 (patch)
treeb73e6dad6d92390ebd55d0abbdc250db8b5b8f35 /src/rustdoc
parentb056e98a277ad19bee8ee562e9685e6dc58fb93b (diff)
rustdoc: Find doc(hidden) even when there are multiple doc attrs
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/attr_parser.rs33
1 files changed, 23 insertions, 10 deletions
diff --git a/src/rustdoc/attr_parser.rs b/src/rustdoc/attr_parser.rs
index 438d4869737..073223617ef 100644
--- a/src/rustdoc/attr_parser.rs
+++ b/src/rustdoc/attr_parser.rs
@@ -44,11 +44,7 @@ fn doc_meta(
      * doc attribute
      */
 
-    let doc_attrs = attr::find_attrs_by_name(attrs, ~"doc");
-    let doc_metas = do doc_attrs.map |attr| {
-        attr::attr_meta(attr::desugar_doc_attr(attr))
-    };
-
+    let doc_metas = doc_metas(attrs);
     if vec::is_not_empty(doc_metas) {
         if vec::len(doc_metas) != 1u {
             warn!("ignoring %u doc attributes", vec::len(doc_metas) - 1u);
@@ -57,6 +53,19 @@ fn doc_meta(
     } else {
         None
     }
+
+}
+
+fn doc_metas(
+    attrs: ~[ast::attribute]
+) -> ~[@ast::meta_item] {
+
+    let doc_attrs = attr::find_attrs_by_name(attrs, ~"doc");
+    let doc_metas = do doc_attrs.map |attr| {
+        attr::attr_meta(attr::desugar_doc_attr(attr))
+    };
+
+    return doc_metas;
 }
 
 fn parse_crate(attrs: ~[ast::attribute]) -> CrateAttrs {
@@ -117,8 +126,7 @@ fn parse_desc_should_parse_simple_doc_attributes() {
 }
 
 fn parse_hidden(attrs: ~[ast::attribute]) -> bool {
-    match doc_meta(attrs) {
-      Some(meta) => {
+    do doc_metas(attrs).find |meta| {
         match attr::get_meta_item_list(meta) {
           Some(metas) => {
             let hiddens = attr::find_meta_items_by_name(metas, ~"hidden");
@@ -126,9 +134,7 @@ fn parse_hidden(attrs: ~[ast::attribute]) -> bool {
           }
           None => false
         }
-      }
-      None => false
-    }
+    }.is_some()
 }
 
 #[test]
@@ -139,6 +145,13 @@ fn should_parse_hidden_attribute() {
 }
 
 #[test]
+fn should_parse_hidden_attribute_with_other_docs() {
+    let source = ~"#[doc = \"foo\"] #[doc(hidden)] #[doc = \"foo\"]";
+    let attrs = test::parse_attributes(source);
+    assert parse_hidden(attrs) == true;
+}
+
+#[test]
 fn should_not_parse_non_hidden_attribute() {
     let source = ~"#[doc = \"\"]";
     let attrs = test::parse_attributes(source);