From 95a006ce520c838fb1368471bcfba3042e176400 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 25 Jan 2012 18:23:21 -0800 Subject: [PATCH] rustdoc: Add enum doc attributes to the doc tree --- src/rustdoc/attr_pass.rs | 60 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index c5698b4afb9..784931caf64 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -23,7 +23,8 @@ fn run( fold_crate: fold_crate, fold_mod: fold_mod, fold_fn: fold_fn, - fold_const: fold_const + fold_const: fold_const, + fold_enum: fold_enum with *fold::default_seq_fold(srv) }); fold.fold_crate(fold, doc) @@ -249,3 +250,60 @@ fn fold_const_should_extract_docs() { assert doc.brief == some("foo"); assert doc.desc == some("bar"); } + +fn fold_enum( + fold: fold::fold, + doc: doc::enumdoc +) -> doc::enumdoc { + let srv = fold.ctxt; + let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_enum); + + ~{ + brief: attrs.brief, + desc: attrs.desc, + variants: vec::map(doc.variants) {|variant| + let attrs = astsrv::exec(srv) {|ctxt| + alt ctxt.map.get(doc.id) { + ast_map::node_item(@{ + node: ast::item_enum(ast_variants, _), _ + }) { + let ast_variant = option::get( + vec::find(ast_variants) {|v| + v.node.name == variant.name + }); + + attr_parser::parse_variant(ast_variant.node.attrs) + } + } + }; + + ~{ + desc: attrs.desc + with *variant + } + } + with *doc + } +} + +#[test] +fn fold_enum_should_extract_docs() { + let source = "#[doc(brief = \"a\", desc = \"b\")]\ + enum a { v }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let fold = fold::default_seq_fold(srv); + let doc = fold_enum(fold, doc.topmod.enums[0]); + assert doc.brief == some("a"); + assert doc.desc == some("b"); +} + +#[test] +fn fold_enum_should_extract_variant_docs() { + let source = "enum a { #[doc = \"c\"] v }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let fold = fold::default_seq_fold(srv); + let doc = fold_enum(fold, doc.topmod.enums[0]); + assert doc.variants[0].desc == some("c"); +}