rustdoc: Add indexes to native mods. Closes #1963

This commit is contained in:
Brian Anderson 2012-03-11 16:36:20 -07:00
parent cb1efb0092
commit 8f071bb841
4 changed files with 61 additions and 8 deletions

View File

@ -63,7 +63,8 @@ type moddoc = {
type nmoddoc = { type nmoddoc = {
item: itemdoc, item: itemdoc,
fns: [fndoc] fns: [fndoc],
index: option<index>
}; };
type constdoc = simpleitemdoc; type constdoc = simpleitemdoc;

View File

@ -125,7 +125,8 @@ fn nmoddoc_from_mod(
fndoc_from_fn(itemdoc) fndoc_from_fn(itemdoc)
} }
} }
} },
index: none
} }
} }

View File

@ -17,8 +17,9 @@ fn run(
config: config::config config: config::config
) -> doc::doc { ) -> doc::doc {
let fold = fold::fold({ let fold = fold::fold({
fold_mod: fold_mod fold_mod: fold_mod,
with *fold::default_any_fold(config) fold_nmod: fold_nmod
with *fold::default_any_fold(config)
}); });
fold.fold_doc(fold, doc) fold.fold_doc(fold, doc)
} }
@ -31,18 +32,42 @@ fn fold_mod(
let doc = fold::default_any_fold_mod(fold, doc); 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 with doc
} }
} }
fn build_index( fn fold_nmod(
fold: fold::fold<config::config>,
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, doc: doc::moddoc,
config: config::config config: config::config
) -> doc::index { ) -> doc::index {
{ {
entries: par::anymap(doc.items) {|item| entries: par::anymap(doc.items) {|doc|
item_to_entry(item, config) 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"); 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)] #[cfg(test)]
mod test { mod test {
fn mk_doc(output_style: config::output_style, source: str) -> doc::doc { fn mk_doc(output_style: config::output_style, source: str) -> doc::doc {

View File

@ -416,8 +416,20 @@ fn should_not_write_index_if_no_entries() {
assert !str::contains(markdown, "\n\n\n"); 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) { fn write_nmod(ctxt: ctxt, doc: doc::nmoddoc) {
write_common(ctxt, doc.desc(), doc.sections()); 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 { for fndoc in doc.fns {
write_item_header(ctxt, doc::fntag(fndoc)); write_item_header(ctxt, doc::fntag(fndoc));