1
Fork 0

rustdoc: Don't add external impls to implementors js

Otherwise impls from not documented crates appear.
This commit is contained in:
Oliver Middleton 2017-08-08 12:22:48 +01:00
parent 95936375a0
commit c62a8c5694
2 changed files with 27 additions and 0 deletions

View file

@ -762,6 +762,7 @@ fn write_shared(cx: &Context,
}
};
let mut have_impls = false;
let mut implementors = format!(r#"implementors["{}"] = ["#, krate.name);
for imp in imps {
// If the trait and implementation are in the same crate, then
@ -769,10 +770,21 @@ fn write_shared(cx: &Context,
// going on). If they're in different crates then the crate defining
// the trait will be interested in our implementation.
if imp.def_id.krate == did.krate { continue }
// If the implementation is from another crate then that crate
// should add it.
if !imp.def_id.is_local() { continue }
have_impls = true;
write!(implementors, "{},", as_json(&imp.impl_.to_string())).unwrap();
}
implementors.push_str("];");
// Only create a js file if we have impls to add to it. If the trait is
// documented locally though we always create the file to avoid dead
// links.
if !have_impls && !cache.paths.contains_key(&did) {
continue;
}
let mut mydst = dst.clone();
for part in &remote_path[..remote_path.len() - 1] {
mydst.push(part);