From ba173d84098024d43628a250b0024ffe83b48558 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Fri, 24 Feb 2012 13:34:35 -0800 Subject: [PATCH] rustdoc: Add doc node for native mods --- src/rustdoc/doc.rs | 11 +++++++++++ src/rustdoc/fold.rs | 23 +++++++++++++++++++++++ src/rustdoc/markdown_pass.rs | 1 + src/rustdoc/reexport_pass.rs | 1 + 4 files changed, 36 insertions(+) diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs index 5c3b2eb52554..12d04b0c6031 100644 --- a/src/rustdoc/doc.rs +++ b/src/rustdoc/doc.rs @@ -11,6 +11,7 @@ type cratedoc = { enum itemtag { modtag(moddoc), + nmodtag(nmoddoc), consttag(constdoc), fntag(fndoc), enumtag(enumdoc), @@ -34,6 +35,11 @@ type moddoc = { items: ~[itemtag] }; +type nmoddoc = { + item: itemdoc, + fns: ~[fndoc] +}; + type constdoc = { item: itemdoc, ty: option @@ -186,6 +192,7 @@ impl of item for itemtag { fn item() -> itemdoc { alt self { doc::modtag(doc) { doc.item } + doc::nmodtag(doc) { doc.item } doc::fntag(doc) { doc.item } doc::consttag(doc) { doc.item } doc::enumtag(doc) { doc.item } @@ -201,6 +208,10 @@ impl of item for moddoc { fn item() -> itemdoc { self.item } } +impl of item for nmoddoc { + fn item() -> itemdoc { self.item } +} + impl of item for fndoc { fn item() -> itemdoc { self.item } } diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 4e32b675a531..f198c7040d15 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -4,6 +4,7 @@ export default_seq_fold; export default_seq_fold_crate; export default_seq_fold_item; export default_seq_fold_mod; +export default_seq_fold_nmod; export default_seq_fold_fn; export default_seq_fold_const; export default_seq_fold_enum; @@ -21,6 +22,7 @@ enum fold = t; type fold_crate = fn~(fold: fold, doc: doc::cratedoc) -> doc::cratedoc; type fold_item = fn~(fold: fold, doc: doc::itemdoc) -> doc::itemdoc; type fold_mod = fn~(fold: fold, doc: doc::moddoc) -> doc::moddoc; +type fold_nmod = fn~(fold: fold, doc: doc::nmoddoc) -> doc::nmoddoc; type fold_fn = fn~(fold: fold, doc: doc::fndoc) -> doc::fndoc; type fold_const = fn~(fold: fold, doc: doc::constdoc) -> doc::constdoc; type fold_enum = fn~(fold: fold, doc: doc::enumdoc) -> doc::enumdoc; @@ -34,6 +36,7 @@ type t = { fold_crate: fold_crate, fold_item: fold_item, fold_mod: fold_mod, + fold_nmod: fold_nmod, fold_fn: fold_fn, fold_const: fold_const, fold_enum: fold_enum, @@ -51,6 +54,7 @@ fn mk_fold( fold_crate: fold_crate, fold_item: fold_item, fold_mod: fold_mod, + fold_nmod: fold_nmod, fold_fn: fold_fn, fold_const: fold_const, fold_enum: fold_enum, @@ -64,6 +68,7 @@ fn mk_fold( fold_crate: fold_crate, fold_item: fold_item, fold_mod: fold_mod, + fold_nmod: fold_nmod, fold_fn: fold_fn, fold_const: fold_const, fold_enum: fold_enum, @@ -80,6 +85,7 @@ fn default_seq_fold(ctxt: T) -> fold { {|f, d| default_seq_fold_crate(f, d)}, {|f, d| default_seq_fold_item(f, d)}, {|f, d| default_seq_fold_mod(f, d)}, + {|f, d| default_seq_fold_nmod(f, d)}, {|f, d| default_seq_fold_fn(f, d)}, {|f, d| default_seq_fold_const(f, d)}, {|f, d| default_seq_fold_enum(f, d)}, @@ -96,6 +102,7 @@ fn default_par_fold(ctxt: T) -> fold { {|f, d| default_seq_fold_crate(f, d)}, {|f, d| default_seq_fold_item(f, d)}, {|f, d| default_par_fold_mod(f, d)}, + {|f, d| default_seq_fold_nmod(f, d)}, {|f, d| default_seq_fold_fn(f, d)}, {|f, d| default_seq_fold_const(f, d)}, {|f, d| default_seq_fold_enum(f, d)}, @@ -141,6 +148,19 @@ fn default_seq_fold_mod( } } +fn default_seq_fold_nmod( + fold: fold, + doc: doc::nmoddoc +) -> doc::nmoddoc { + { + item: fold.fold_item(fold, doc.item), + fns: ~vec::map(*doc.fns) {|fndoc| + fold.fold_fn(fold, fndoc) + } + with doc + } +} + fn default_par_fold_mod( fold: fold, doc: doc::moddoc @@ -166,6 +186,9 @@ fn fold_itemtag(fold: fold, doc: doc::itemtag) -> doc::itemtag { doc::modtag(moddoc) { doc::modtag(fold.fold_mod(fold, moddoc)) } + doc::nmodtag(nmoddoc) { + doc::nmodtag(fold.fold_nmod(fold, nmoddoc)) + } doc::fntag(fndoc) { doc::fntag(fold.fold_fn(fold, fndoc)) } diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs index c81bba6fda50..18c169318a3c 100644 --- a/src/rustdoc/markdown_pass.rs +++ b/src/rustdoc/markdown_pass.rs @@ -133,6 +133,7 @@ fn write_mod_contents( for itemtag in *doc.items { alt itemtag { doc::modtag(moddoc) { write_mod(ctxt, moddoc) } + doc::nmodtag(_) { fail } doc::fntag(fndoc) { write_fn(ctxt, fndoc) } doc::consttag(constdoc) { write_const(ctxt, constdoc) } doc::enumtag(enumdoc) { write_enum(ctxt, enumdoc) } diff --git a/src/rustdoc/reexport_pass.rs b/src/rustdoc/reexport_pass.rs index b397767b03bf..44ca3e4fcaad 100644 --- a/src/rustdoc/reexport_pass.rs +++ b/src/rustdoc/reexport_pass.rs @@ -227,6 +227,7 @@ fn merge_reexports( with doc }) } + doc::nmodtag(_) { fail } doc::consttag(doc @ {item, _}) { doc::consttag({ item: rename(item, name)