Skip to content

Commit 06ab83d

Browse files
committed
rustdoc: Prune undocumented resources
1 parent ce7d150 commit 06ab83d

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

src/rustdoc/fold.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default_seq_fold_mod;
99
export default_seq_fold_fn;
1010
export default_seq_fold_const;
1111
export default_seq_fold_enum;
12+
export default_seq_fold_res;
1213
export default_seq_fold_fnlist;
1314

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

src/rustdoc/prune_undoc_pass.rs

Lines changed: 66 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ fn run(
2222
fold_fn: fold_fn,
2323
fold_const: fold_const,
2424
fold_enum: fold_enum,
25+
fold_res: fold_res,
2526
fold_modlist: fold_modlist,
2627
fold_fnlist: fold_fnlist,
2728
fold_constlist: fold_constlist,
28-
fold_enumlist: fold_enumlist
29+
fold_enumlist: fold_enumlist,
30+
fold_reslist: fold_reslist
2931
with *fold::default_seq_fold(ctxt)
3032
});
3133
fold.fold_crate(fold, doc)
@@ -280,3 +282,66 @@ fn should_not_elide_enums_with_documented_variants() {
280282
let doc = run(srv, doc);
281283
assert vec::is_not_empty(*doc.topmod.enums);
282284
}
285+
286+
fn fold_res(fold: fold::fold<ctxt>, doc: doc::resdoc) -> doc::resdoc {
287+
let doc = ~{
288+
args: vec::filter_map(doc.args) {|arg|
289+
if arg.desc != none {
290+
some(arg)
291+
} else {
292+
none
293+
}
294+
}
295+
with *fold::default_seq_fold_res(fold, doc)
296+
};
297+
fold.ctxt.have_docs =
298+
doc.brief != none
299+
|| doc.desc != none
300+
|| vec::is_not_empty(doc.args);
301+
ret doc;
302+
}
303+
304+
fn fold_reslist(
305+
fold: fold::fold<ctxt>,
306+
list: doc::reslist
307+
) -> doc::reslist {
308+
doc::reslist(vec::filter_map(*list) {|doc|
309+
let doc = fold.fold_res(fold, doc);
310+
if fold.ctxt.have_docs {
311+
some(doc)
312+
} else {
313+
none
314+
}
315+
})
316+
}
317+
318+
#[test]
319+
fn should_elide_undocumented_resources() {
320+
let source = "resource r(a: bool) { }";
321+
let srv = astsrv::mk_srv_from_str(source);
322+
let doc = extract::from_srv(srv, "");
323+
let doc = run(srv, doc);
324+
assert vec::is_empty(*doc.topmod.resources);
325+
}
326+
327+
#[test]
328+
fn should_elide_undocumented_resource_args() {
329+
let source = "#[doc = \"drunk\"]\
330+
resource r(a: bool) { }";
331+
let srv = astsrv::mk_srv_from_str(source);
332+
let doc = extract::from_srv(srv, "");
333+
let doc = attr_pass::mk_pass()(srv, doc);
334+
let doc = run(srv, doc);
335+
assert vec::is_empty(doc.topmod.resources[0].args);
336+
}
337+
338+
#[test]
339+
fn should_not_elide_resources_with_documented_args() {
340+
let source = "#[doc(args(a = \"drunk\"))]\
341+
resource r(a: bool) { }";
342+
let srv = astsrv::mk_srv_from_str(source);
343+
let doc = extract::from_srv(srv, "");
344+
let doc = attr_pass::mk_pass()(srv, doc);
345+
let doc = run(srv, doc);
346+
assert vec::is_not_empty(*doc.topmod.resources);
347+
}

0 commit comments

Comments
 (0)