Skip to content

Commit 1d94f40

Browse files
committed
rustdoc: Prune undocumented enums
1 parent 95a006c commit 1d94f40

File tree

2 files changed

+66
-1
lines changed

2 files changed

+66
-1
lines changed

src/rustdoc/fold.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export default_seq_fold_crate;
88
export default_seq_fold_mod;
99
export default_seq_fold_fn;
1010
export default_seq_fold_const;
11+
export default_seq_fold_enum;
1112
export default_seq_fold_fnlist;
1213

1314
enum fold<T> = t<T>;

src/rustdoc/prune_undoc_pass.rs

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ fn run(
2121
fold_mod: fold_mod,
2222
fold_fn: fold_fn,
2323
fold_const: fold_const,
24+
fold_enum: fold_enum,
2425
fold_modlist: fold_modlist,
2526
fold_fnlist: fold_fnlist,
26-
fold_constlist: fold_constlist
27+
fold_constlist: fold_constlist,
28+
fold_enumlist: fold_enumlist
2729
with *fold::default_seq_fold(ctxt)
2830
});
2931
fold.fold_crate(fold, doc)
@@ -216,3 +218,65 @@ fn should_elide_undocumented_consts() {
216218
let doc = run(srv, doc);
217219
assert vec::is_empty(*doc.topmod.consts);
218220
}
221+
222+
fn fold_enum(fold: fold::fold<ctxt>, doc: doc::enumdoc) -> doc::enumdoc {
223+
let doc = ~{
224+
variants: vec::filter_map(doc.variants) {|variant|
225+
if variant.desc != none {
226+
some(variant)
227+
} else {
228+
none
229+
}
230+
}
231+
with *fold::default_seq_fold_enum(fold, doc)
232+
};
233+
fold.ctxt.have_docs =
234+
doc.brief != none
235+
|| doc.desc != none
236+
|| vec::is_not_empty(doc.variants);
237+
ret doc;
238+
}
239+
240+
fn fold_enumlist(
241+
fold: fold::fold<ctxt>,
242+
list: doc::enumlist
243+
) -> doc::enumlist {
244+
doc::enumlist(vec::filter_map(*list) {|doc|
245+
let doc = fold.fold_enum(fold, doc);
246+
if fold.ctxt.have_docs {
247+
some(doc)
248+
} else {
249+
none
250+
}
251+
})
252+
}
253+
254+
#[test]
255+
fn should_elide_undocumented_enums() {
256+
let source = "enum a { b }";
257+
let srv = astsrv::mk_srv_from_str(source);
258+
let doc = extract::from_srv(srv, "");
259+
let doc = attr_pass::mk_pass()(srv, doc);
260+
let doc = run(srv, doc);
261+
assert vec::is_empty(*doc.topmod.enums);
262+
}
263+
264+
#[test]
265+
fn should_elide_undocumented_variants() {
266+
let source = "#[doc = \"a\"] enum a { b }";
267+
let srv = astsrv::mk_srv_from_str(source);
268+
let doc = extract::from_srv(srv, "");
269+
let doc = attr_pass::mk_pass()(srv, doc);
270+
let doc = run(srv, doc);
271+
assert vec::is_empty(doc.topmod.enums[0].variants);
272+
}
273+
274+
#[test]
275+
fn should_not_elide_enums_with_documented_variants() {
276+
let source = "enum a { #[doc = \"a\"] b }";
277+
let srv = astsrv::mk_srv_from_str(source);
278+
let doc = extract::from_srv(srv, "");
279+
let doc = attr_pass::mk_pass()(srv, doc);
280+
let doc = run(srv, doc);
281+
assert vec::is_not_empty(*doc.topmod.enums);
282+
}

0 commit comments

Comments
 (0)