diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index ddb14d6944b9d..b4db409f40671 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -1704,7 +1704,7 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, try!(write!(w, "{{\n")); for t in types.iter() { try!(write!(w, " ")); - try!(render_method(w, t.item())); + try!(render_method(w, t.item(), cx.current.connect(",").as_slice())); try!(write!(w, ";\n")); } if types.len() > 0 && required.len() > 0 { @@ -1712,7 +1712,7 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, } for m in required.iter() { try!(write!(w, " ")); - try!(render_method(w, m.item())); + try!(render_method(w, m.item(), cx.current.connect(",").as_slice())); try!(write!(w, ";\n")); } if required.len() > 0 && provided.len() > 0 { @@ -1720,7 +1720,7 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, } for m in provided.iter() { try!(write!(w, " ")); - try!(render_method(w, m.item())); + try!(render_method(w, m.item(), cx.current.connect(",").as_slice())); try!(write!(w, " {{ ... }}\n")); } try!(write!(w, "}}")); @@ -1732,11 +1732,16 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, fn trait_item(w: &mut fmt::Formatter, m: &clean::TraitMethod) -> fmt::Result { + let ctx_s: &str = match m.item().name { + Some(ref name) => name.as_slice(), + None => "" + }; + try!(write!(w, "

{}", shortty(m.item()), *m.item().name.as_ref().unwrap(), ConciseStability(&m.item().stability))); - try!(render_method(w, m.item())); + try!(render_method(w, m.item(), ctx_s)); try!(write!(w, "

")); try!(document(w, m.item())); Ok(()) @@ -1806,7 +1811,8 @@ fn item_trait(w: &mut fmt::Formatter, cx: &Context, it: &clean::Item, Ok(()) } -fn assoc_type(w: &mut fmt::Formatter, it: &clean::Item, +fn assoc_type(w: &mut fmt::Formatter, + it: &clean::Item, typ: &clean::TyParam) -> fmt::Result { try!(write!(w, "type {}", it.name.as_ref().unwrap())); if typ.bounds.len() > 0 { @@ -1818,16 +1824,17 @@ fn assoc_type(w: &mut fmt::Formatter, it: &clean::Item, Ok(()) } -fn render_method(w: &mut fmt::Formatter, meth: &clean::Item) -> fmt::Result { - fn method(w: &mut fmt::Formatter, it: &clean::Item, unsafety: ast::Unsafety, - g: &clean::Generics, selfty: &clean::SelfTy, +fn render_method(w: &mut fmt::Formatter, meth: &clean::Item, ctx_s: &str) -> fmt::Result { + fn method(w: &mut fmt::Formatter, it: &clean::Item, ctx_s: &str, + unsafety: ast::Unsafety, g: &clean::Generics, selfty: &clean::SelfTy, d: &clean::FnDecl) -> fmt::Result { - write!(w, "{}fn {name}\ + write!(w, "{}fn {name}\ {generics}{decl}{where_clause}", match unsafety { ast::Unsafety::Unsafe => "unsafe ", _ => "", }, + ctx = ctx_s, ty = shortty(it), name = it.name.as_ref().unwrap().as_slice(), generics = *g, @@ -1836,10 +1843,10 @@ fn render_method(w: &mut fmt::Formatter, meth: &clean::Item) -> fmt::Result { } match meth.inner { clean::TyMethodItem(ref m) => { - method(w, meth, m.unsafety, &m.generics, &m.self_, &m.decl) + method(w, meth, ctx_s, m.unsafety, &m.generics, &m.self_, &m.decl) } clean::MethodItem(ref m) => { - method(w, meth, m.unsafety, &m.generics, &m.self_, &m.decl) + method(w, meth, ctx_s, m.unsafety, &m.generics, &m.self_, &m.decl) } clean::AssociatedTypeItem(ref typ) => { assoc_type(w, meth, typ) @@ -2085,10 +2092,13 @@ fn render_impl(w: &mut fmt::Formatter, i: &Impl) -> fmt::Result { try!(write!(w, "

{}impl{} ", ConciseStability(&i.stability), i.impl_.generics)); - match i.impl_.trait_ { - Some(ref ty) => try!(write!(w, "{} for ", *ty)), - None => {} - } + let method_context = format!("{}:{}", + i.impl_.for_, + match i.impl_.trait_ { + Some(ref ty) => {try!(write!(w, "{} for ", *ty)); + format!("{}", *ty)}, + None => String::from_str("") + }); try!(write!(w, "{}{}

", i.impl_.for_, WhereClause(&i.impl_.generics))); match i.dox { Some(ref dox) => { @@ -2098,15 +2108,18 @@ fn render_impl(w: &mut fmt::Formatter, i: &Impl) -> fmt::Result { None => {} } - fn doctraititem(w: &mut fmt::Formatter, item: &clean::Item, dox: bool) - -> fmt::Result { + fn doctraititem(w: &mut fmt::Formatter, + item: &clean::Item, + dox: bool, + method_context: &str) -> fmt::Result { match item.inner { clean::MethodItem(..) | clean::TyMethodItem(..) => { - try!(write!(w, "

{}", + try!(write!(w, "

{}", + method_context, *item.name.as_ref().unwrap(), shortty(item), ConciseStability(&item.stability))); - try!(render_method(w, item)); + try!(render_method(w, item, method_context)); try!(write!(w, "

\n")); } clean::TypedefItem(ref tydef) => { @@ -2140,12 +2153,13 @@ fn render_impl(w: &mut fmt::Formatter, i: &Impl) -> fmt::Result { try!(write!(w, "
")); for trait_item in i.impl_.items.iter() { - try!(doctraititem(w, trait_item, true)); + try!(doctraititem(w, trait_item, true, method_context.as_slice())); } - fn render_default_methods(w: &mut fmt::Formatter, - t: &clean::Trait, - i: &clean::Impl) -> fmt::Result { + fn render_default_methods(w: &mut fmt::Formatter, + t: &clean::Trait, + i: &clean::Impl, + method_context: &str) -> fmt::Result { for trait_item in t.items.iter() { let n = trait_item.item().name.clone(); match i.items.iter().find(|m| { m.name == n }) { @@ -2153,7 +2167,7 @@ fn render_impl(w: &mut fmt::Formatter, i: &Impl) -> fmt::Result { None => {} } - try!(doctraititem(w, trait_item.item(), false)); + try!(doctraititem(w, trait_item.item(), false, method_context.as_slice())); } Ok(()) } @@ -2166,7 +2180,10 @@ fn render_impl(w: &mut fmt::Formatter, i: &Impl) -> fmt::Result { Some(clean::ResolvedPath { did, .. }) => { try!({ match cache().traits.get(&did) { - Some(t) => try!(render_default_methods(w, t, &i.impl_)), + Some(t) => try!(render_default_methods(w, + t, + &i.impl_, + method_context.as_slice())), None => {} } Ok(())