about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-25 18:23:21 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-25 21:04:53 -0800
commit95a006ce520c838fb1368471bcfba3042e176400 (patch)
tree17da8da7a52892b0945151d89616c2616478f85d /src
parenta25bc195e25fcce97301b907e2a03501daafb9b9 (diff)
rustdoc: Add enum doc attributes to the doc tree
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/attr_pass.rs60
1 files changed, 59 insertions, 1 deletions
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<astsrv::srv>,
+    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");
+}