diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 607f2411234b..6f20870691e8 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -9,6 +9,7 @@ export default_seq_fold_mod; export default_seq_fold_fn; export default_seq_fold_const; export default_seq_fold_enum; +export default_seq_fold_res; export default_seq_fold_fnlist; enum fold = t; diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs index 5e2b59d0e414..11be00eea85a 100644 --- a/src/rustdoc/prune_undoc_pass.rs +++ b/src/rustdoc/prune_undoc_pass.rs @@ -22,10 +22,12 @@ fn run( fold_fn: fold_fn, fold_const: fold_const, fold_enum: fold_enum, + fold_res: fold_res, fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, fold_constlist: fold_constlist, - fold_enumlist: fold_enumlist + fold_enumlist: fold_enumlist, + fold_reslist: fold_reslist with *fold::default_seq_fold(ctxt) }); fold.fold_crate(fold, doc) @@ -280,3 +282,66 @@ fn should_not_elide_enums_with_documented_variants() { let doc = run(srv, doc); assert vec::is_not_empty(*doc.topmod.enums); } + +fn fold_res(fold: fold::fold, doc: doc::resdoc) -> doc::resdoc { + let doc = ~{ + args: vec::filter_map(doc.args) {|arg| + if arg.desc != none { + some(arg) + } else { + none + } + } + with *fold::default_seq_fold_res(fold, doc) + }; + fold.ctxt.have_docs = + doc.brief != none + || doc.desc != none + || vec::is_not_empty(doc.args); + ret doc; +} + +fn fold_reslist( + fold: fold::fold, + list: doc::reslist +) -> doc::reslist { + doc::reslist(vec::filter_map(*list) {|doc| + let doc = fold.fold_res(fold, doc); + if fold.ctxt.have_docs { + some(doc) + } else { + none + } + }) +} + +#[test] +fn should_elide_undocumented_resources() { + let source = "resource r(a: bool) { }"; + 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.resources); +} + +#[test] +fn should_elide_undocumented_resource_args() { + let source = "#[doc = \"drunk\"]\ + resource r(a: bool) { }"; + 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_empty(doc.topmod.resources[0].args); +} + +#[test] +fn should_not_elide_resources_with_documented_args() { + let source = "#[doc(args(a = \"drunk\"))]\ + resource r(a: bool) { }"; + 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.resources); +}