From 60443d48881bfbc7a305e807390e74b327f100b8 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 21 Sep 2012 18:07:17 -0700 Subject: [PATCH] rustdoc: Add prune_private_pass. Off for now --- src/rustdoc/prune_private_pass.rs | 65 +++++++++++++++++++++++++++++++ src/rustdoc/rustdoc.rc | 1 + src/rustdoc/rustdoc.rs | 3 ++ 3 files changed, 69 insertions(+) create mode 100644 src/rustdoc/prune_private_pass.rs 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, + 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