diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs index 2da723fa7dd..c1532eba4f8 100644 --- a/src/rustdoc/doc.rs +++ b/src/rustdoc/doc.rs @@ -63,7 +63,8 @@ type moddoc = { type nmoddoc = { item: itemdoc, - fns: [fndoc] + fns: [fndoc], + index: option }; type constdoc = simpleitemdoc; diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index 23cc4755cf4..6bcd93ba9f5 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -125,7 +125,8 @@ fn nmoddoc_from_mod( fndoc_from_fn(itemdoc) } } - } + }, + index: none } } diff --git a/src/rustdoc/markdown_index_pass.rs b/src/rustdoc/markdown_index_pass.rs index 7b4336f7386..f7b49be1ed5 100644 --- a/src/rustdoc/markdown_index_pass.rs +++ b/src/rustdoc/markdown_index_pass.rs @@ -17,8 +17,9 @@ fn run( config: config::config ) -> doc::doc { let fold = fold::fold({ - fold_mod: fold_mod - with *fold::default_any_fold(config) + fold_mod: fold_mod, + fold_nmod: fold_nmod + with *fold::default_any_fold(config) }); fold.fold_doc(fold, doc) } @@ -31,18 +32,42 @@ fn fold_mod( let doc = fold::default_any_fold_mod(fold, doc); { - index: some(build_index(doc, fold.ctxt)) + index: some(build_mod_index(doc, fold.ctxt)) with doc } } -fn build_index( +fn fold_nmod( + fold: fold::fold, + doc: doc::nmoddoc +) -> doc::nmoddoc { + + let doc = fold::default_any_fold_nmod(fold, doc); + + { + index: some(build_nmod_index(doc, fold.ctxt)) + with doc + } +} + +fn build_mod_index( doc: doc::moddoc, config: config::config ) -> doc::index { { - entries: par::anymap(doc.items) {|item| - item_to_entry(item, config) + entries: par::anymap(doc.items) {|doc| + item_to_entry(doc, config) + } + } +} + +fn build_nmod_index( + doc: doc::nmoddoc, + config: config::config +) -> doc::index { + { + entries: par::anymap(doc.fns) {|doc| + item_to_entry(doc::fntag(doc), config) } } } @@ -172,6 +197,20 @@ fn should_add_brief_desc_to_index() { assert option::get(doc.cratemod().index).entries[0].brief == some("test"); } +#[test] +fn should_index_native_mod_contents() { + let doc = test::mk_doc( + config::doc_per_crate, + "native mod a { fn b(); }" + ); + assert option::get(doc.cratemod().nmods()[0].index).entries[0] == { + kind: "Function", + name: "b", + brief: none, + link: "#function-b" + }; +} + #[cfg(test)] mod test { fn mk_doc(output_style: config::output_style, source: str) -> doc::doc { diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs index 7be42143a5e..255a6a485c8 100644 --- a/src/rustdoc/markdown_pass.rs +++ b/src/rustdoc/markdown_pass.rs @@ -416,8 +416,20 @@ fn should_not_write_index_if_no_entries() { assert !str::contains(markdown, "\n\n\n"); } +#[test] +fn should_write_index_for_native_mods() { + let markdown = test::render("native mod a { fn a(); }"); + assert str::contains( + markdown, + "\n\n* [Function `a`](#function-a)\n\n" + ); +} + fn write_nmod(ctxt: ctxt, doc: doc::nmoddoc) { write_common(ctxt, doc.desc(), doc.sections()); + if option::is_some(doc.index) { + write_index(ctxt, option::get(doc.index)); + } for fndoc in doc.fns { write_item_header(ctxt, doc::fntag(fndoc));