about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/prune_private_pass.rs65
-rw-r--r--src/rustdoc/rustdoc.rc1
-rwxr-xr-xsrc/rustdoc/rustdoc.rs3
3 files changed, 69 insertions, 0 deletions
diff --git a/src/rustdoc/prune_private_pass.rs b/src/rustdoc/prune_private_pass.rs
new file mode 100644
index 00000000000..9bb17766366
--- /dev/null
+++ b/src/rustdoc/prune_private_pass.rs
@@ -0,0 +1,65 @@
+//! Prune things that are private
+
+export mk_pass;
+
+fn mk_pass() -> Pass {
+    {
+        name: ~"prune_private",
+        f: run
+    }
+}
+
+fn run(srv: astsrv::Srv, doc: doc::Doc) -> doc::Doc {
+    let fold = fold::Fold({
+        fold_mod: fold_mod,
+        .. *fold::default_any_fold(srv)
+    });
+    fold.fold_doc(fold, doc)
+}
+
+fn fold_mod(
+    fold: fold::Fold<astsrv::Srv>,
+    doc: doc::ModDoc
+) -> doc::ModDoc {
+    let doc = fold::default_any_fold_mod(fold, doc);
+
+    doc::ModDoc_({
+        items: do doc.items.filter |ItemTag| {
+            is_visible(fold.ctxt, ItemTag.item())
+        },
+        .. *doc
+    })
+}
+
+fn is_visible(srv: astsrv::Srv, doc: doc::ItemDoc) -> bool {
+    use syntax::ast_map;
+    use syntax::ast;
+
+    let id = doc.id;
+
+    do astsrv::exec(srv) |ctxt| {
+        match ctxt.ast_map.get(id) {
+            ast_map::node_item(item, _) => {
+                item.vis == ast::public
+            }
+            _ => util::unreachable()
+        }
+    }
+}
+
+#[test]
+fn should_prune_items_without_pub_modifier() {
+    let doc = test::mk_doc(~"mod a { }");
+    assert vec::is_empty(doc.cratemod().mods());
+}
+
+#[cfg(test)]
+mod test {
+    fn mk_doc(source: ~str) -> doc::Doc {
+        do astsrv::from_str(source) |srv| {
+            let doc = extract::from_srv(srv, ~"");
+            run(srv, doc)
+        }
+    }
+}
+
diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc
index adde20e0209..a93f47e5223 100644
--- a/src/rustdoc/rustdoc.rc
+++ b/src/rustdoc/rustdoc.rc
@@ -49,3 +49,4 @@ mod sort_item_type_pass;
 mod page_pass;
 mod sectionalize_pass;
 mod escape_pass;
+mod prune_private_pass;
\ No newline at end of file
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index edbf5ca1a94..648d1d7a322 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -53,6 +53,9 @@ fn run(config: Config) {
             escape_pass::mk_pass(),
             // Remove things marked doc(hidden)
             prune_hidden_pass::mk_pass(),
+            // Remove things that are private
+            // XXX enable this after 'export' is removed in favor of 'pub'
+            // prune_private_pass::mk_pass(),
             // Extract brief documentation from the full descriptions
             desc_to_brief_pass::mk_pass(),
             // Massage the text to remove extra indentation