diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index cb3258660a1..bcc26e1124f 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -8,6 +8,7 @@ export default_seq_fold_crate; export default_seq_fold_mod; export default_seq_fold_fn; export default_seq_fold_const; +export default_seq_fold_enum; 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 4256d08c30a..5e2b59d0e41 100644 --- a/src/rustdoc/prune_undoc_pass.rs +++ b/src/rustdoc/prune_undoc_pass.rs @@ -21,9 +21,11 @@ fn run( fold_mod: fold_mod, fold_fn: fold_fn, fold_const: fold_const, + fold_enum: fold_enum, fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, - fold_constlist: fold_constlist + fold_constlist: fold_constlist, + fold_enumlist: fold_enumlist with *fold::default_seq_fold(ctxt) }); fold.fold_crate(fold, doc) @@ -216,3 +218,65 @@ fn should_elide_undocumented_consts() { let doc = run(srv, doc); assert vec::is_empty(*doc.topmod.consts); } + +fn fold_enum(fold: fold::fold, doc: doc::enumdoc) -> doc::enumdoc { + let doc = ~{ + variants: vec::filter_map(doc.variants) {|variant| + if variant.desc != none { + some(variant) + } else { + none + } + } + with *fold::default_seq_fold_enum(fold, doc) + }; + fold.ctxt.have_docs = + doc.brief != none + || doc.desc != none + || vec::is_not_empty(doc.variants); + ret doc; +} + +fn fold_enumlist( + fold: fold::fold, + list: doc::enumlist +) -> doc::enumlist { + doc::enumlist(vec::filter_map(*list) {|doc| + let doc = fold.fold_enum(fold, doc); + if fold.ctxt.have_docs { + some(doc) + } else { + none + } + }) +} + +#[test] +fn should_elide_undocumented_enums() { + let source = "enum a { 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_empty(*doc.topmod.enums); +} + +#[test] +fn should_elide_undocumented_variants() { + let source = "#[doc = \"a\"] enum a { 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_empty(doc.topmod.enums[0].variants); +} + +#[test] +fn should_not_elide_enums_with_documented_variants() { + let source = "enum a { #[doc = \"a\"] 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.enums); +}