From 74e8b111946d21c331e6d3581c2486c6780fc0cd Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Wed, 25 Jan 2012 20:55:55 -0800 Subject: [PATCH] rustdoc: Write markdown for enums --- src/rustdoc/markdown_pass.rs | 89 ++++++++++++++++++++++++++++++++++++ src/rustdoc/rustdoc.rs | 4 ++ 2 files changed, 93 insertions(+) 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) } }