diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-01-23 15:40:01 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-01-23 15:40:01 -0800 |
| commit | e51599932478db1d841912a6e0a10cbc20335e1f (patch) | |
| tree | bc939045785718b36f73893eeca74bc4a96595c1 | |
| parent | 521e58a3c4f45ffc30a914dd0bb517945d87a503 (diff) | |
| download | rust-e51599932478db1d841912a6e0a10cbc20335e1f.tar.gz rust-e51599932478db1d841912a6e0a10cbc20335e1f.zip | |
rustdoc: Prune undocumented modules
| -rw-r--r-- | src/rustdoc/prune_undoc_pass.rs | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs index ba8a5456a27..dd7abf2f0ed 100644 --- a/src/rustdoc/prune_undoc_pass.rs +++ b/src/rustdoc/prune_undoc_pass.rs @@ -18,13 +18,28 @@ fn run( mutable have_docs: true }; let fold = fold::fold({ + fold_mod: fold_mod, fold_fn: fold_fn, + fold_modlist: fold_modlist, fold_fnlist: fold_fnlist with *fold::default_seq_fold(ctxt) }); fold.fold_crate(fold, doc) } +fn fold_mod( + fold: fold::fold<ctxt>, + doc: doc::moddoc +) -> doc::moddoc { + let doc = fold::default_seq_fold_mod(fold, doc); + fold.ctxt.have_docs = + doc.brief != none + || doc.desc != none + || vec::is_not_empty(*doc.mods) + || vec::is_not_empty(*doc.fns); + ret doc; +} + fn fold_fn( fold: fold::fold<ctxt>, doc: doc::fndoc @@ -36,6 +51,20 @@ fn fold_fn( ret doc; } +fn fold_modlist( + fold: fold::fold<ctxt>, + list: doc::modlist +) -> doc::modlist { + doc::modlist(vec::filter_map(*list) {|doc| + let doc = fold_mod(fold, doc); + if fold.ctxt.have_docs { + some(doc) + } else { + none + } + }) +} + fn fold_fnlist( fold: fold::fold<ctxt>, list: doc::fnlist @@ -53,6 +82,35 @@ fn fold_fnlist( #[cfg(test)] mod tests { #[test] + fn should_elide_undocumented_mods() { + let source = "mod a { }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let doc = run(srv, doc); + assert vec::is_empty(*doc.topmod.mods); + } + + #[test] + fn should_not_elide_undocument_mods_with_documented_mods() { + let source = "mod a { #[doc = \"b\"] mod b { } }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let doc = attr_pass::mk_pass()(srv, doc); + let doc = run(srv, doc); + assert vec::is_not_empty(*doc.topmod.mods); + } + + #[test] + fn should_not_elide_undocument_mods_with_documented_fns() { + let source = "mod a { #[doc = \"b\"] fn b() { } }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let doc = attr_pass::mk_pass()(srv, doc); + let doc = run(srv, doc); + assert vec::is_not_empty(*doc.topmod.mods); + } + + #[test] fn should_elide_undocumented_fns() { let source = "fn a() { }"; let srv = astsrv::mk_srv_from_str(source); |
