]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Prune the paths that do not appear in the index.
authorKang Seonghoon <public+git@mearie.org>
Tue, 8 Apr 2014 18:25:54 +0000 (03:25 +0900)
committerAlex Crichton <alex@alexcrichton.com>
Thu, 10 Apr 2014 22:21:59 +0000 (15:21 -0700)
For the full library and compiler docs, the size of
`search-index.js` decreases by 13% (18.5% after gzip -9)
which is a substantial gain.

src/librustdoc/html/render.rs

index 9e5c8f05c5008d6abcb6dfc8e6a0fb55dbadc102..ff437ff23dce7b5b438aae62b375dab2e2e7c65d 100644 (file)
@@ -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<ast::NodeId> = 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