diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index c4f2c7207ac39..0672a9efbda62 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -1898,7 +1898,7 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, } // If there are methods directly on this trait object, render them here. - try!(render_assoc_items(w, it.def_id, AssocItemRender::All)); + try!(render_assoc_items(w, &[it.def_id], AssocItemRender::All)); let cache = cache(); try!(write!(w, " @@ -2047,7 +2047,7 @@ fn item_struct(w: &mut fmt::Formatter, it: &clean::Item, try!(write!(w, "")); } } - render_assoc_items(w, it.def_id, AssocItemRender::All) + render_assoc_items(w, &[it.def_id], AssocItemRender::All) } fn item_enum(w: &mut fmt::Formatter, it: &clean::Item, @@ -2146,7 +2146,7 @@ fn item_enum(w: &mut fmt::Formatter, it: &clean::Item, try!(write!(w, "")); } - try!(render_assoc_items(w, it.def_id, AssocItemRender::All)); + try!(render_assoc_items(w, &[it.def_id], AssocItemRender::All)); Ok(()) } @@ -2241,14 +2241,11 @@ enum AssocItemRender<'a> { } fn render_assoc_items(w: &mut fmt::Formatter, - it: ast::DefId, + its: &[ast::DefId], what: AssocItemRender) -> fmt::Result { let c = cache(); - let v = match c.impls.get(&it) { - Some(v) => v, - None => return Ok(()), - }; - let (non_trait, traits): (Vec<_>, _) = v.iter().partition(|i| { + let impls = its.iter().filter_map(|it| c.impls.get(it)).flat_map(|i| i); + let (non_trait, traits): (Vec<_>, _) = impls.partition(|i| { i.impl_.trait_.is_none() }); if !non_trait.is_empty() { @@ -2314,12 +2311,12 @@ fn render_deref_methods(w: &mut fmt::Formatter, impl_: &Impl) -> fmt::Result { }).next().expect("Expected associated type binding"); let what = AssocItemRender::DerefFor { trait_: deref_type, type_: target }; match *target { - clean::ResolvedPath { did, .. } => render_assoc_items(w, did, what), + clean::ResolvedPath { did, .. } => render_assoc_items(w, &[did], what), _ => { if let Some(prim) = target.primitive_type() { if let Some(c) = cache().primitive_locations.get(&prim) { let did = ast::DefId { krate: *c, node: prim.to_node_id() }; - try!(render_assoc_items(w, did, what)); + try!(render_assoc_items(w, &[did], what)); } } Ok(()) @@ -2457,7 +2454,13 @@ fn item_typedef(w: &mut fmt::Formatter, it: &clean::Item, where_clause = WhereClause(&t.generics), type_ = t.type_)); - document(w, it) + try!(document(w, it)); + match t.type_ { + clean::Type::ResolvedPath { did, .. } => { + render_assoc_items(w, &[it.def_id, did], AssocItemRender::All) + } + _ => render_assoc_items(w, &[it.def_id], AssocItemRender::All), + } } impl<'a> fmt::Display for Sidebar<'a> { @@ -2540,7 +2543,7 @@ fn item_primitive(w: &mut fmt::Formatter, it: &clean::Item, _p: &clean::PrimitiveType) -> fmt::Result { try!(document(w, it)); - render_assoc_items(w, it.def_id, AssocItemRender::All) + render_assoc_items(w, &[it.def_id], AssocItemRender::All) } fn get_basic_keywords() -> &'static str {