Skip to content

Commit 1f937fa

Browse files
committed
rustdoc: render derived impls separately
1 parent e88387a commit 1f937fa

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

src/librustdoc/clean.rs

+14-1
Original file line numberDiff line numberDiff line change
@@ -1020,11 +1020,23 @@ pub struct Impl {
10201020
generics: Generics,
10211021
trait_: Option<Type>,
10221022
for_: Type,
1023-
methods: Vec<Item> ,
1023+
methods: Vec<Item>,
1024+
derived: bool,
10241025
}
10251026

10261027
impl Clean<Item> for doctree::Impl {
10271028
fn clean(&self) -> Item {
1029+
let mut derived = false;
1030+
for attr in self.attrs.iter() {
1031+
match attr.node.value.node {
1032+
ast::MetaWord(ref s) => {
1033+
if s.get() == "automatically_derived" {
1034+
derived = true;
1035+
}
1036+
}
1037+
_ => {}
1038+
}
1039+
}
10281040
Item {
10291041
name: None,
10301042
attrs: self.attrs.clean(),
@@ -1036,6 +1048,7 @@ impl Clean<Item> for doctree::Impl {
10361048
trait_: self.trait_.clean(),
10371049
for_: self.for_.clean(),
10381050
methods: self.methods.clean(),
1051+
derived: derived,
10391052
}),
10401053
}
10411054
}

src/librustdoc/html/render.rs

+16-2
Original file line numberDiff line numberDiff line change
@@ -1517,8 +1517,22 @@ fn render_methods(w: &mut Writer, it: &clean::Item) -> fmt::Result {
15171517
if traits.len() > 0 {
15181518
try!(write!(w, "<h2 id='implementations'>Trait \
15191519
Implementations</h2>"));
1520-
for &(ref i, ref dox) in traits.move_iter() {
1521-
try!(render_impl(w, i, dox));
1520+
let mut any_derived = false;
1521+
for & &(ref i, ref dox) in traits.iter() {
1522+
if !i.derived {
1523+
try!(render_impl(w, i, dox));
1524+
} else {
1525+
any_derived = true;
1526+
}
1527+
}
1528+
if any_derived {
1529+
try!(write!(w, "<h3 id='derived_implementations'>Derived Implementations \
1530+
</h3>"));
1531+
for &(ref i, ref dox) in traits.move_iter() {
1532+
if i.derived {
1533+
try!(render_impl(w, i, dox));
1534+
}
1535+
}
15221536
}
15231537
}
15241538
}

0 commit comments

Comments
 (0)