Skip to content

Commit a752dcf

Browse files
alexcrichtonmcpherrinm
authored andcommitted
rustdoc: Deduplicate lists of implementors
Inlining caused implementors to show up multiple times. cc rust-lang#14584
1 parent f442bce commit a752dcf

File tree

1 file changed

+7
-0
lines changed

1 file changed

+7
-0
lines changed

src/librustdoc/html/render.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ pub enum ExternalLocation {
108108

109109
/// Metadata about an implementor of a trait.
110110
pub struct Implementor {
111+
def_id: ast::DefId,
111112
generics: clean::Generics,
112113
trait_: clean::Type,
113114
for_: clean::Type,
@@ -531,6 +532,11 @@ fn write_shared(cx: &Context,
531532

532533
try!(write!(&mut f, r"implementors['{}'] = [", krate.name));
533534
for imp in imps.iter() {
535+
// If the trait and implementation are in the same crate, then
536+
// there's no need to emit information about it (there's inlining
537+
// going on). If they're in different crates then the crate defining
538+
// the trait will be interested in our implementation.
539+
if imp.def_id.krate == did.krate { continue }
534540
try!(write!(&mut f, r#""impl{} {} for {}","#,
535541
imp.generics, imp.trait_, imp.for_));
536542
}
@@ -759,6 +765,7 @@ impl DocFolder for Cache {
759765
Vec::new()
760766
});
761767
v.push(Implementor {
768+
def_id: item.def_id,
762769
generics: i.generics.clone(),
763770
trait_: i.trait_.get_ref().clone(),
764771
for_: i.for_.clone(),

0 commit comments

Comments
 (0)