diff --git a/src/librustdoc/clean.rs b/src/librustdoc/clean.rs index bb6302b9fb77f1cc1c69feec0a829394a65866db..0bc3da15462ad483747d47380da7f74f1ccf35e6 100644 --- a/src/librustdoc/clean.rs +++ b/src/librustdoc/clean.rs @@ -1020,11 +1020,23 @@ pub struct Impl { generics: Generics, trait_: Option, for_: Type, - methods: Vec , + methods: Vec, + derived: bool, } impl Clean for doctree::Impl { fn clean(&self) -> Item { + let mut derived = false; + for attr in self.attrs.iter() { + match attr.node.value.node { + ast::MetaWord(ref s) => { + if s.get() == "automatically_derived" { + derived = true; + } + } + _ => {} + } + } Item { name: None, attrs: self.attrs.clean(), @@ -1036,6 +1048,7 @@ fn clean(&self) -> Item { trait_: self.trait_.clean(), for_: self.for_.clean(), methods: self.methods.clean(), + derived: derived, }), } } diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 66b965633a0d9a53bf3369c8ef45243922a1473c..0f4e1284e74037c5d21cea832e61b861080ea3d4 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -1517,8 +1517,22 @@ fn render_methods(w: &mut Writer, it: &clean::Item) -> fmt::Result { if traits.len() > 0 { try!(write!(w, "

Trait \ Implementations

")); - for &(ref i, ref dox) in traits.move_iter() { - try!(render_impl(w, i, dox)); + let mut any_derived = false; + for & &(ref i, ref dox) in traits.iter() { + if !i.derived { + try!(render_impl(w, i, dox)); + } else { + any_derived = true; + } + } + if any_derived { + try!(write!(w, "

Derived Implementations \ +

")); + for &(ref i, ref dox) in traits.move_iter() { + if i.derived { + try!(render_impl(w, i, dox)); + } + } } } }