Skip to content

Commit fdea1c4

Browse files
committed
rustdoc: Extract doc nodes for native mods
1 parent ba173d8 commit fdea1c4

File tree

3 files changed

+45
-2
lines changed

3 files changed

+45
-2
lines changed

src/rustdoc/doc.rs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ type moddoc = {
3737

3838
type nmoddoc = {
3939
item: itemdoc,
40-
fns: ~[fndoc]
40+
fns: [fndoc]
4141
};
4242

4343
type constdoc = {
@@ -120,6 +120,15 @@ impl util for moddoc {
120120
}
121121
}
122122

123+
fn nmods() -> [nmoddoc] {
124+
vec::filter_map(*self.items) {|itemtag|
125+
alt itemtag {
126+
nmodtag(nmoddoc) { some(nmoddoc) }
127+
_ { none }
128+
}
129+
}
130+
}
131+
123132
fn fns() -> [fndoc] {
124133
vec::filter_map(*self.items) {|itemtag|
125134
alt itemtag {

src/rustdoc/extract.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ fn moddoc_from_mod(
5757
moddoc_from_mod(itemdoc, m)
5858
))
5959
}
60+
ast::item_native_mod(nm) {
61+
some(doc::nmodtag(
62+
nmoddoc_from_mod(itemdoc, nm)
63+
))
64+
}
6065
ast::item_fn(decl, _, _) {
6166
some(doc::fntag(
6267
fndoc_from_fn(itemdoc, decl)
@@ -100,6 +105,23 @@ fn moddoc_from_mod(
100105
}
101106
}
102107

108+
fn nmoddoc_from_mod(
109+
itemdoc: doc::itemdoc,
110+
module: ast::native_mod
111+
) -> doc::nmoddoc {
112+
{
113+
item: itemdoc,
114+
fns: vec::map(module.items) {|item|
115+
let itemdoc = mk_itemdoc(item.id, item.ident);
116+
alt item.node {
117+
ast::native_item_fn(decl, _) {
118+
fndoc_from_fn(itemdoc, decl)
119+
}
120+
}
121+
}
122+
}
123+
}
124+
103125
fn fndoc_from_fn(
104126
itemdoc: doc::itemdoc,
105127
decl: ast::fn_decl
@@ -341,6 +363,18 @@ mod test {
341363
assert doc.topmod.mods()[0].mods()[1].name() == "c";
342364
}
343365

366+
#[test]
367+
fn extract_native_mods() {
368+
let doc = mk_doc("native mod a { }");
369+
assert doc.topmod.nmods()[0].name() == "a";
370+
}
371+
372+
#[test]
373+
fn extract_fns_from_native_mods() {
374+
let doc = mk_doc("native mod a { fn a(); }");
375+
assert doc.topmod.nmods()[0].fns[0].name() == "a";
376+
}
377+
344378
#[test]
345379
fn extract_mods_deep() {
346380
let doc = mk_doc("mod a { mod b { mod c { } } }");

src/rustdoc/fold.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ fn default_seq_fold_nmod<T>(
154154
) -> doc::nmoddoc {
155155
{
156156
item: fold.fold_item(fold, doc.item),
157-
fns: ~vec::map(*doc.fns) {|fndoc|
157+
fns: vec::map(doc.fns) {|fndoc|
158158
fold.fold_fn(fold, fndoc)
159159
}
160160
with doc

0 commit comments

Comments
 (0)