From 6cf496ce97cc466bfa92b7ed7190a759cd9c1c33 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 19 Sep 2012 18:50:41 -0700 Subject: [PATCH] rustdoc: Find doc(hidden) even when there are multiple doc attrs --- src/rustdoc/attr_parser.rs | 33 +++++++++++++++++++++++---------- 1 file 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] @@ -138,6 +144,13 @@ fn should_parse_hidden_attribute() { assert parse_hidden(attrs) == true; } +#[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 = \"\"]";