From fdea1c414ce356a61bc70525ed96746fa25c4330 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 24 Feb 2012 13:50:40 -0800 Subject: [PATCH] rustdoc: Extract doc nodes for native mods --- src/rustdoc/doc.rs | 11 ++++++++++- src/rustdoc/extract.rs | 34 ++++++++++++++++++++++++++++++++++ src/rustdoc/fold.rs | 2 +- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs index 12d04b0c603..f5c5c07564a 100644 --- a/src/rustdoc/doc.rs +++ b/src/rustdoc/doc.rs @@ -37,7 +37,7 @@ type moddoc = { type nmoddoc = { item: itemdoc, - fns: ~[fndoc] + fns: [fndoc] }; type constdoc = { @@ -120,6 +120,15 @@ impl util for moddoc { } } + fn nmods() -> [nmoddoc] { + vec::filter_map(*self.items) {|itemtag| + alt itemtag { + nmodtag(nmoddoc) { some(nmoddoc) } + _ { none } + } + } + } + fn fns() -> [fndoc] { vec::filter_map(*self.items) {|itemtag| alt itemtag { diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index 004f1b6df17..8a2770a76d1 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -57,6 +57,11 @@ fn moddoc_from_mod( moddoc_from_mod(itemdoc, m) )) } + ast::item_native_mod(nm) { + some(doc::nmodtag( + nmoddoc_from_mod(itemdoc, nm) + )) + } ast::item_fn(decl, _, _) { some(doc::fntag( fndoc_from_fn(itemdoc, decl) @@ -100,6 +105,23 @@ fn moddoc_from_mod( } } +fn nmoddoc_from_mod( + itemdoc: doc::itemdoc, + module: ast::native_mod +) -> doc::nmoddoc { + { + item: itemdoc, + fns: vec::map(module.items) {|item| + let itemdoc = mk_itemdoc(item.id, item.ident); + alt item.node { + ast::native_item_fn(decl, _) { + fndoc_from_fn(itemdoc, decl) + } + } + } + } +} + fn fndoc_from_fn( itemdoc: doc::itemdoc, decl: ast::fn_decl @@ -341,6 +363,18 @@ mod test { assert doc.topmod.mods()[0].mods()[1].name() == "c"; } + #[test] + fn extract_native_mods() { + let doc = mk_doc("native mod a { }"); + assert doc.topmod.nmods()[0].name() == "a"; + } + + #[test] + fn extract_fns_from_native_mods() { + let doc = mk_doc("native mod a { fn a(); }"); + assert doc.topmod.nmods()[0].fns[0].name() == "a"; + } + #[test] fn extract_mods_deep() { let doc = mk_doc("mod a { mod b { mod c { } } }"); diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index f198c7040d1..efdcf277ffb 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -154,7 +154,7 @@ fn default_seq_fold_nmod( ) -> doc::nmoddoc { { item: fold.fold_item(fold, doc.item), - fns: ~vec::map(*doc.fns) {|fndoc| + fns: vec::map(doc.fns) {|fndoc| fold.fold_fn(fold, fndoc) } with doc