about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-25 20:55:55 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-25 21:04:53 -0800
commit74e8b111946d21c331e6d3581c2486c6780fc0cd (patch)
tree26110079f3c8a858464d6809461b06f360faa991 /src
parentd6ce20973a8c467c234d877aa4cbde5f73be20f0 (diff)
downloadrust-74e8b111946d21c331e6d3581c2486c6780fc0cd.tar.gz
rust-74e8b111946d21c331e6d3581c2486c6780fc0cd.zip
rustdoc: Write markdown for enums
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/markdown_pass.rs89
-rwxr-xr-xsrc/rustdoc/rustdoc.rs4
2 files changed, 93 insertions, 0 deletions
diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs
index f82a4a5f610..a513e6a2e58 100644
--- a/src/rustdoc/markdown_pass.rs
+++ b/src/rustdoc/markdown_pass.rs
@@ -85,6 +85,10 @@ fn write_mod_contents(
         write_const(ctxt, constdoc);
     }
 
+    for enumdoc in *doc.enums {
+        write_enum(ctxt, enumdoc);
+    }
+
     for fndoc in *doc.fns {
         write_fn(ctxt, fndoc);
     }
@@ -348,6 +352,91 @@ fn should_write_const_description() {
     assert str::contains(markdown, "\n\na\n\nb\n\n");
 }
 
+fn write_enum(
+    ctxt: ctxt,
+    doc: doc::enumdoc
+) {
+    write_header(ctxt, h3, #fmt("Enum `%s`", doc.name));
+    write_brief(ctxt, doc.brief);
+    write_desc(ctxt, doc.desc);
+    write_variants(ctxt, doc.variants);
+}
+
+#[test]
+fn should_write_enum_header() {
+    let markdown = test::render("enum a { b }");
+    assert str::contains(markdown, "### Enum `a`\n\n");
+}
+
+#[test]
+fn should_write_enum_description() {
+    let markdown = test::render(
+        "#[doc(brief = \"a\", desc = \"b\")] enum a { b }");
+    assert str::contains(markdown, "\n\na\n\nb\n\n");
+}
+
+fn write_variants(
+    ctxt: ctxt,
+    docs: [doc::variantdoc]
+) {
+    if vec::is_empty(docs) {
+        ret;
+    }
+
+    ctxt.w.write_line("Variants:");
+    ctxt.w.write_line("");
+
+    vec::iter(docs, {|variant| write_variant(ctxt, variant) });
+
+    ctxt.w.write_line("");
+}
+
+fn write_variant(ctxt: ctxt, doc: doc::variantdoc) {
+    assert option::is_some(doc.sig);
+    let sig = option::get(doc.sig);
+    alt doc.desc {
+      some(desc) {
+        ctxt.w.write_line(#fmt("* `%s` - %s", sig, desc));
+      }
+      none {
+        ctxt.w.write_line(#fmt("* `%s`", sig));
+      }
+    }
+}
+
+#[test]
+fn should_write_variant_list() {
+    let markdown = test::render(
+        "enum a { \
+         #[doc = \"test\"] b, \
+         #[doc = \"test\"] c }");
+    assert str::contains(
+        markdown,
+        "\n\nVariants:\n\
+         \n* `b` - test\
+         \n* `c` - test\n\n");
+}
+
+#[test]
+fn should_write_variant_list_without_descs() {
+    let markdown = test::render("enum a { b, c }");
+    assert str::contains(
+        markdown,
+        "\n\nVariants:\n\
+         \n* `b`\
+         \n* `c`\n\n");
+}
+
+#[test]
+fn should_write_variant_list_with_signatures() {
+    let markdown = test::render("enum a { b(int), #[doc = \"a\"] c(int) }");
+    assert str::contains(
+        markdown,
+        "\n\nVariants:\n\
+         \n* `b(int)`\
+         \n* `c(int)` - a\n\n");
+}
+
 #[cfg(test)]
 mod test {
     fn render(source: str) -> str {
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index 2612af68ff7..4574dd8429c 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -27,7 +27,11 @@ fn run_passes(
          original through each pass"
     )];
 
+    let passno = 0;
     vec::foldl(doc, passes) {|doc, pass|
+        log(debug, #fmt("pass #%d", passno));
+        passno += 1;
+        log(debug, doc);
         pass(srv, doc)
     }
 }