about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-03-02 16:20:36 -0800
committerBrian Anderson <banderson@mozilla.com>2012-03-02 16:20:53 -0800
commit87b9d67b66daa43393f150a66158a71a8cd99a4a (patch)
tree0ea890a6234710629236c7656b405df5066a7016 /src/rustdoc
parent3ed6f6520f56204f1c7c799ec8fa231bef0fb4d1 (diff)
downloadrust-87b9d67b66daa43393f150a66158a71a8cd99a4a.tar.gz
rust-87b9d67b66daa43393f150a66158a71a8cd99a4a.zip
rustdoc: Write indexes in output
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/markdown_pass.rs34
1 files changed, 34 insertions, 0 deletions
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)
         }
     }