Skip to content

Commit 95a006c

Browse files
committed
rustdoc: Add enum doc attributes to the doc tree
1 parent a25bc19 commit 95a006c

File tree

1 file changed

+59
-1
lines changed

1 file changed

+59
-1
lines changed

src/rustdoc/attr_pass.rs

Lines changed: 59 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ fn run(
2323
fold_crate: fold_crate,
2424
fold_mod: fold_mod,
2525
fold_fn: fold_fn,
26-
fold_const: fold_const
26+
fold_const: fold_const,
27+
fold_enum: fold_enum
2728
with *fold::default_seq_fold(srv)
2829
});
2930
fold.fold_crate(fold, doc)
@@ -249,3 +250,60 @@ fn fold_const_should_extract_docs() {
249250
assert doc.brief == some("foo");
250251
assert doc.desc == some("bar");
251252
}
253+
254+
fn fold_enum(
255+
fold: fold::fold<astsrv::srv>,
256+
doc: doc::enumdoc
257+
) -> doc::enumdoc {
258+
let srv = fold.ctxt;
259+
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_enum);
260+
261+
~{
262+
brief: attrs.brief,
263+
desc: attrs.desc,
264+
variants: vec::map(doc.variants) {|variant|
265+
let attrs = astsrv::exec(srv) {|ctxt|
266+
alt ctxt.map.get(doc.id) {
267+
ast_map::node_item(@{
268+
node: ast::item_enum(ast_variants, _), _
269+
}) {
270+
let ast_variant = option::get(
271+
vec::find(ast_variants) {|v|
272+
v.node.name == variant.name
273+
});
274+
275+
attr_parser::parse_variant(ast_variant.node.attrs)
276+
}
277+
}
278+
};
279+
280+
~{
281+
desc: attrs.desc
282+
with *variant
283+
}
284+
}
285+
with *doc
286+
}
287+
}
288+
289+
#[test]
290+
fn fold_enum_should_extract_docs() {
291+
let source = "#[doc(brief = \"a\", desc = \"b\")]\
292+
enum a { v }";
293+
let srv = astsrv::mk_srv_from_str(source);
294+
let doc = extract::from_srv(srv, "");
295+
let fold = fold::default_seq_fold(srv);
296+
let doc = fold_enum(fold, doc.topmod.enums[0]);
297+
assert doc.brief == some("a");
298+
assert doc.desc == some("b");
299+
}
300+
301+
#[test]
302+
fn fold_enum_should_extract_variant_docs() {
303+
let source = "enum a { #[doc = \"c\"] v }";
304+
let srv = astsrv::mk_srv_from_str(source);
305+
let doc = extract::from_srv(srv, "");
306+
let fold = fold::default_seq_fold(srv);
307+
let doc = fold_enum(fold, doc.topmod.enums[0]);
308+
assert doc.variants[0].desc == some("c");
309+
}

0 commit comments

Comments
 (0)