From 87b9d67b66daa43393f150a66158a71a8cd99a4a Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 2 Mar 2012 16:20:36 -0800 Subject: [PATCH] rustdoc: Write indexes in output --- src/rustdoc/markdown_pass.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs index 42d0681c357..fcaaadafd41 100644 --- a/src/rustdoc/markdown_pass.rs +++ b/src/rustdoc/markdown_pass.rs @@ -223,6 +223,9 @@ fn write_mod_contents( ) { write_brief(ctxt, doc.brief()); write_desc(ctxt, doc.desc()); + if option::is_some(doc.index) { + write_index(ctxt, option::get(doc.index)); + } for itemtag in doc.items { alt itemtag { @@ -251,6 +254,35 @@ fn should_write_crate_description() { assert str::contains(markdown, "this is the crate"); } +fn write_index(ctxt: ctxt, index: doc::index) { + if vec::is_empty(index.entries) { + ret; + } + + for entry in index.entries { + let header = header_text_(entry.kind, entry.name); + let id = entry.link; + ctxt.w.write_line(#fmt("* [%s](#%s)", header, id)); + } + ctxt.w.write_line(""); +} + +#[test] +fn should_write_index() { + let markdown = test::render("mod a { } mod b { }"); + assert str::contains( + markdown, + "\n\n* [Module `a`](#module-a)\n\ + * [Module `b`](#module-b)\n\n" + ); +} + +#[test] +fn should_not_write_index_if_no_entries() { + let markdown = test::render(""); + assert !str::contains(markdown, "\n\n\n"); +} + fn write_nmod(ctxt: ctxt, doc: doc::nmoddoc) { write_header(ctxt, h1, doc::nmodtag(doc)); @@ -905,6 +937,8 @@ mod test { #debug("doc (path): %?", doc); let doc = attr_pass::mk_pass().f(srv, doc); #debug("doc (attr): %?", doc); + let doc = markdown_index_pass::mk_pass().f(srv, doc); + #debug("doc (index): %?", doc); (srv, doc) } }