| //! 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<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 { |
| pub fn mk_doc(source: ~str) -> doc::Doc { |
| do astsrv::from_str(source) |srv| { |
| let doc = extract::from_srv(srv, ~""); |
| run(srv, doc) |
| } |
| } |
| } |
| |