//! Prune things that are private #[legacy_exports]; 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 } _ => core::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 { pub fn mk_doc(source: ~str) -> doc::Doc { do astsrv::from_str(source) |srv| { let doc = extract::from_srv(srv, ~""); run(srv, doc) } } }