diff options
| author | Kang Seonghoon <public+git@mearie.org> | 2014-04-29 03:59:48 +0900 |
|---|---|---|
| committer | Kang Seonghoon <public+git@mearie.org> | 2014-04-29 04:01:55 +0900 |
| commit | 3b5d6b4de54cfce8a1897faa8eadb49a2a1d0688 (patch) | |
| tree | f611328d542e39758638c15e93baf515469ce819 | |
| parent | 3e284eeb21d8276abecd052b8a72e3146e787e95 (diff) | |
| download | rust-3b5d6b4de54cfce8a1897faa8eadb49a2a1d0688.tar.gz rust-3b5d6b4de54cfce8a1897faa8eadb49a2a1d0688.zip | |
rustdoc: Make strip_hidden use a dedicated hidden item if any.
fixes #13806.
| -rw-r--r-- | src/librustdoc/clean.rs | 17 | ||||
| -rw-r--r-- | src/librustdoc/passes.rs | 31 |
2 files changed, 32 insertions, 16 deletions
diff --git a/src/librustdoc/clean.rs b/src/librustdoc/clean.rs index cabfb05cb6f..cabfe695df7 100644 --- a/src/librustdoc/clean.rs +++ b/src/librustdoc/clean.rs @@ -152,6 +152,21 @@ impl Item { return None; } + pub fn is_hidden_from_doc(&self) -> bool { + match self.doc_list() { + Some(ref l) => { + for innerattr in l.iter() { + match *innerattr { + Word(ref s) if "hidden" == *s => return true, + _ => (), + } + } + }, + None => () + } + return false; + } + pub fn is_mod(&self) -> bool { match self.inner { ModuleItem(..) => true, _ => false } } @@ -736,7 +751,7 @@ impl Clean<Type> for ast::Ty { #[deriving(Clone, Encodable, Decodable)] pub enum StructField { - HiddenStructField, + HiddenStructField, // inserted later by strip passes TypedStructField(Type), } diff --git a/src/librustdoc/passes.rs b/src/librustdoc/passes.rs index 9b6d04f2ca4..f8a2382c028 100644 --- a/src/librustdoc/passes.rs +++ b/src/librustdoc/passes.rs @@ -33,23 +33,24 @@ pub fn strip_hidden(krate: clean::Crate) -> plugins::PluginResult { }; impl<'a> fold::DocFolder for Stripper<'a> { fn fold_item(&mut self, i: Item) -> Option<Item> { - for attr in i.attrs.iter() { - match attr { - &clean::List(ref x, ref l) if "doc" == *x => { - for innerattr in l.iter() { - match innerattr { - &clean::Word(ref s) if "hidden" == *s => { - debug!("found one in strip_hidden; removing"); - self.stripped.insert(i.id); - return None; - }, - _ => (), - } - } - }, - _ => () + if i.is_hidden_from_doc() { + debug!("found one in strip_hidden; removing"); + self.stripped.insert(i.id); + + // use a dedicated hidden item for given item type if any + match i.inner { + clean::StructFieldItem(..) => { + return Some(clean::Item { + inner: clean::StructFieldItem(clean::HiddenStructField), + ..i + }); + } + _ => { + return None; + } } } + self.fold_item_recur(i) } } |
