diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 9e5c8f05c50..ff437ff23dc 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -262,10 +262,11 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> { cache.stack.push(krate.name.clone()); krate = cache.fold_crate(krate); { + let Cache { search_index: ref mut index, + orphan_methods: ref meths, paths: ref mut paths, ..} = cache; + // Attach all orphan methods to the type's definition if the type // has since been learned. - let Cache { search_index: ref mut index, - orphan_methods: ref meths, paths: ref paths, ..} = cache; for &(ref pid, ref item) in meths.iter() { match paths.find(pid) { Some(&(ref fqp, _)) => { @@ -280,6 +281,18 @@ pub fn run(mut krate: clean::Crate, dst: Path) -> io::IoResult<()> { None => {} } }; + + // Prune the paths that do not appear in the index. + let mut unseen: HashSet = paths.keys().map(|&id| id).collect(); + for item in index.iter() { + match item.parent { + Some(ref pid) => { unseen.remove(pid); } + None => {} + } + } + for pid in unseen.iter() { + paths.remove(pid); + } } // Publish the search index