From 56da32c5566207627a57d9e336cbb8c1f09c91c0 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 30 Sep 2013 17:04:14 -0700 Subject: [PATCH] rustdoc: Don't ignore dox on impl blocks Closes #9611 --- src/librustdoc/html/render.rs | 48 ++++++++++++++++++++++++++--------- 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 58527b37a82..ae5310e4724 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -61,7 +61,7 @@ struct Cache { // typaram id => name of that typaram typarams: HashMap, // type id => all implementations for that type - impls: HashMap, + impls: HashMap)]>, // path id => (full qualified path, shortty) -- used to generate urls paths: HashMap, // trait id => method name => dox @@ -454,21 +454,34 @@ impl DocFolder for Cache { // implementations elsewhere let ret = match self.fold_item_recur(item) { Some(item) => { - match item.inner { - clean::ImplItem(i) => { + match item { + clean::Item{ attrs, inner: clean::ImplItem(i), _ } => { match i.for_ { clean::ResolvedPath { did, _ } if is_local(did) => { let id = did.node; let v = do self.impls.find_or_insert_with(id) |_| { ~[] }; - v.push(i); + // extract relevant documentation for this impl + match attrs.move_iter().find(|a| { + match *a { + clean::NameValue(~"doc", _) => true, + _ => false + } + }) { + Some(clean::NameValue(_, dox)) => { + v.push((i, Some(dox))); + } + Some(*) | None => { + v.push((i, None)); + } + } } _ => {} } None } - _ => Some(item), + i => Some(i), } } i => i, @@ -1205,22 +1218,26 @@ fn render_methods(w: &mut io::Writer, it: &clean::Item) { do cache.read |c| { match c.impls.find(&it.id) { Some(v) => { - let mut non_trait = v.iter().filter(|i| i.trait_.is_none()); + let mut non_trait = v.iter().filter(|p| { + p.n0_ref().trait_.is_none() + }); let non_trait = non_trait.to_owned_vec(); - let mut traits = v.iter().filter(|i| i.trait_.is_some()); + let mut traits = v.iter().filter(|p| { + p.n0_ref().trait_.is_some() + }); let traits = traits.to_owned_vec(); if non_trait.len() > 0 { write!(w, "

Methods

"); - for &i in non_trait.iter() { - render_impl(w, i); + for &(ref i, ref dox) in non_trait.move_iter() { + render_impl(w, i, dox); } } if traits.len() > 0 { write!(w, "

Trait \ Implementations

"); - for &i in traits.iter() { - render_impl(w, i); + for &(ref i, ref dox) in traits.move_iter() { + render_impl(w, i, dox); } } } @@ -1230,7 +1247,7 @@ fn render_methods(w: &mut io::Writer, it: &clean::Item) { } } -fn render_impl(w: &mut io::Writer, i: &clean::Impl) { +fn render_impl(w: &mut io::Writer, i: &clean::Impl, dox: &Option<~str>) { write!(w, "

impl{} ", i.generics); let trait_id = match i.trait_ { Some(ref ty) => { @@ -1243,6 +1260,13 @@ fn render_impl(w: &mut io::Writer, i: &clean::Impl) { None => None }; write!(w, "{}

", i.for_); + match *dox { + Some(ref dox) => { + write!(w, "
{}
", + Markdown(dox.as_slice())); + } + None => {} + } write!(w, "
"); for meth in i.methods.iter() { write!(w, "

",