diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index c5850089578cd..ba1fbc75c18a3 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -2489,7 +2489,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
}
fn doctraititem(w: &mut fmt::Formatter, cx: &Context, item: &clean::Item,
- link: AssocItemLink, render_static: bool,
+ link: AssocItemLink, render_static: bool, is_default_item: bool,
outer_version: Option<&str>) -> fmt::Result {
let shortty = shortty(item);
let name = item.name.as_ref().unwrap();
@@ -2540,17 +2540,16 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
_ => panic!("can't make docs for trait item with name {:?}", item.name)
}
- match link {
- AssocItemLink::Anchor if !is_static || render_static => {
- document(w, cx, item)
- },
- _ => Ok(()),
+ if !is_default_item && (!is_static || render_static) {
+ document(w, cx, item)
+ } else {
+ Ok(())
}
}
write!(w, "
")?;
for trait_item in &i.impl_.items {
- doctraititem(w, cx, trait_item, link, render_header, outer_version)?;
+ doctraititem(w, cx, trait_item, link, render_header, false, outer_version)?;
}
fn render_default_items(w: &mut fmt::Formatter,
@@ -2567,7 +2566,7 @@ fn render_impl(w: &mut fmt::Formatter, cx: &Context, i: &Impl, link: AssocItemLi
let did = i.trait_.as_ref().unwrap().def_id().unwrap();
let assoc_link = AssocItemLink::GotoSource(did, &i.provided_trait_methods);
- doctraititem(w, cx, trait_item, assoc_link, render_static,
+ doctraititem(w, cx, trait_item, assoc_link, render_static, true,
outer_version)?;
}
Ok(())
diff --git a/src/test/rustdoc/manual_impl.rs b/src/test/rustdoc/manual_impl.rs
new file mode 100644
index 0000000000000..5eccf97bb5f6f
--- /dev/null
+++ b/src/test/rustdoc/manual_impl.rs
@@ -0,0 +1,78 @@
+// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 or the MIT license
+// , at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// @has manual_impl/trait.T.html
+// @has - '//*[@class="docblock"]' 'Docs associated with the trait definition.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+/// Docs associated with the trait definition.
+pub trait T {
+ /// Docs associated with the trait a_method definition.
+ fn a_method(&self) -> usize;
+
+ /// Docs associated with the trait b_method definition.
+ fn b_method(&self) -> usize {
+ self.a_method()
+ }
+}
+
+// @has manual_impl/struct.S1.html '//*[@class="trait"]' 'T'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S1 trait implementation.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S1 trait a_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S1(usize);
+
+/// Docs associated with the S1 trait implementation.
+impl T for S1 {
+ /// Docs associated with the S1 trait a_method implementation.
+ fn a_method(&self) -> usize {
+ self.0
+ }
+}
+
+// @has manual_impl/struct.S2.html '//*[@class="trait"]' 'T'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S2 trait implementation.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S2 trait a_method implementation.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S2 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait b_method definition.'
+pub struct S2(usize);
+
+/// Docs associated with the S2 trait implementation.
+impl T for S2 {
+ /// Docs associated with the S2 trait a_method implementation.
+ fn a_method(&self) -> usize {
+ self.0
+ }
+
+ /// Docs associated with the S2 trait b_method implementation.
+ fn b_method(&self) -> usize {
+ 5
+ }
+}
+
+// @has manual_impl/struct.S3.html '//*[@class="trait"]' 'T'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S3 trait implementation.'
+// @has - '//*[@class="docblock"]' 'Docs associated with the S3 trait b_method implementation.'
+// @!has - '//*[@class="docblock"]' 'Docs associated with the trait a_method definition.'
+pub struct S3(usize);
+
+/// Docs associated with the S3 trait implementation.
+impl T for S3 {
+ fn a_method(&self) -> usize {
+ self.0
+ }
+
+ /// Docs associated with the S3 trait b_method implementation.
+ fn b_method(&self) -> usize {
+ 5
+ }
+}