summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-25 17:48:06 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-25 21:04:53 -0800
commita25bc195e25fcce97301b907e2a03501daafb9b9 (patch)
tree74b49687628a8deeba65e518a6eb7f68d93cb981 /src/rustdoc
parent87c3a5c1a3e2daee39afb60be83133bf4caf4413 (diff)
downloadrust-a25bc195e25fcce97301b907e2a03501daafb9b9.tar.gz
rust-a25bc195e25fcce97301b907e2a03501daafb9b9.zip
rustdoc: Parse variant doc attributes
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/attr_parser.rs51
1 files changed, 49 insertions, 2 deletions
diff --git a/src/rustdoc/attr_parser.rs b/src/rustdoc/attr_parser.rs
index f822023a054..bcdc093aed6 100644
--- a/src/rustdoc/attr_parser.rs
+++ b/src/rustdoc/attr_parser.rs
@@ -9,8 +9,10 @@ import rustc::syntax::ast;
 import rustc::front::attr;
 import core::tuple;
 
-export crate_attrs, mod_attrs, fn_attrs, arg_attrs, const_attrs, enum_attrs;
-export parse_crate, parse_mod, parse_fn, parse_const, parse_enum;
+export crate_attrs, mod_attrs, fn_attrs, arg_attrs,
+       const_attrs, enum_attrs, variant_attrs;
+export parse_crate, parse_mod, parse_fn, parse_const,
+       parse_enum, parse_variant;
 
 type crate_attrs = {
     name: option<str>
@@ -370,3 +372,48 @@ fn should_parse_enum_long_doc() {
     assert attrs.brief == some("a");
     assert attrs.desc == some("b");
 }
+
+fn parse_variant(attrs: [ast::attribute]) -> variant_attrs {
+    parse_short_doc_or(
+        attrs,
+        {|desc|
+            {
+                desc: desc
+            }
+        },
+        {|_items, brief, desc|
+            if option::is_some(brief) && option::is_some(desc) {
+                // FIXME: Warn about dropping brief description
+            }
+
+            {
+                // Prefer desc over brief
+                desc: option::maybe(brief, desc, {|s| some(s) })
+            }
+        }
+    )
+}
+
+#[test]
+fn should_parse_variant_short_doc() {
+    let source = "#[doc = \"a\"]";
+    let attrs = test::parse_attributes(source);
+    let attrs = parse_variant(attrs);
+    assert attrs.desc == some("a");
+}
+
+#[test]
+fn should_parse_variant_brief_doc() {
+    let source = "#[doc(brief = \"a\")]";
+    let attrs = test::parse_attributes(source);
+    let attrs = parse_variant(attrs);
+    assert attrs.desc == some("a");
+}
+
+#[test]
+fn should_parse_variant_long_doc() {
+    let source = "#[doc(desc = \"a\")]";
+    let attrs = test::parse_attributes(source);
+    let attrs = parse_variant(attrs);
+    assert attrs.desc == some("a");
+}