From f9a6b3731fc44ba7b6e612ca80353aba592ea769 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 23 Jan 2012 23:40:30 -0800 Subject: rustdoc: Add fold_const and fold_constlist to fold --- src/rustdoc/fold.rs | 73 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 56 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 0a778ba3d54..0aea4744ba4 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -1,3 +1,6 @@ +// FIXME: Random import to solve the mystery resolve bug +import std; + export fold; export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist; export default_seq_fold; @@ -11,16 +14,23 @@ enum fold = t; type fold_crate = fn~(fold: fold, doc: doc::cratedoc) -> doc::cratedoc; type fold_mod = fn~(fold: fold, doc: doc::moddoc) -> doc::moddoc; type fold_fn = fn~(fold: fold, doc: doc::fndoc) -> doc::fndoc; -type fold_modlist = fn~(fold: fold,list: doc::modlist) -> doc::modlist; -type fold_fnlist = fn~(fold: fold,list: doc::fnlist) -> doc::fnlist; +type fold_const = fn~(fold: fold, doc: doc::constdoc) -> doc::constdoc; +type fold_modlist = fn~(fold: fold, list: doc::modlist) -> doc::modlist; +type fold_fnlist = fn~(fold: fold, list: doc::fnlist) -> doc::fnlist; +type fold_constlist = fn~( + fold: fold, + list: doc::constlist +) -> doc::constlist; type t = { ctxt: T, fold_crate: fold_crate, fold_mod: fold_mod, fold_fn: fold_fn, + fold_const: fold_const, fold_modlist: fold_modlist, - fold_fnlist: fold_fnlist + fold_fnlist: fold_fnlist, + fold_constlist: fold_constlist }; @@ -31,16 +41,20 @@ fn mk_fold( fold_crate: fold_crate, fold_mod: fold_mod, fold_fn: fold_fn, + fold_const: fold_const, fold_modlist: fold_modlist, - fold_fnlist: fold_fnlist + fold_fnlist: fold_fnlist, + fold_constlist: fold_constlist ) -> fold { fold({ ctxt: ctxt, fold_crate: fold_crate, fold_mod: fold_mod, fold_fn: fold_fn, + fold_const: fold_const, fold_modlist: fold_modlist, - fold_fnlist: fold_fnlist + fold_fnlist: fold_fnlist, + fold_constlist: fold_constlist }) } @@ -50,8 +64,10 @@ fn default_seq_fold(ctxt: T) -> fold { {|f, d| default_seq_fold_crate(f, d)}, {|f, d| default_seq_fold_mod(f, d)}, {|f, d| default_seq_fold_fn(f, d)}, + {|f, d| default_seq_fold_const(f, d)}, {|f, d| default_seq_fold_modlist(f, d)}, - {|f, d| default_seq_fold_fnlist(f, d)} + {|f, d| default_seq_fold_fnlist(f, d)}, + {|f, d| default_seq_fold_constlist(f, d)} ) } @@ -82,6 +98,13 @@ fn default_seq_fold_fn( doc } +fn default_seq_fold_const( + _fold: fold, + doc: doc::constdoc +) -> doc::constdoc { + doc +} + fn default_seq_fold_modlist( fold: fold, list: doc::modlist @@ -100,15 +123,31 @@ fn default_seq_fold_fnlist( }) } -#[cfg(test)] -mod tests { - #[test] - fn default_fold_should_produce_same_doc() { - let source = "mod a { fn b() { } mod c { fn d() { } } }"; - let ast = parse::from_str(source); - let doc = extract::extract(ast, ""); - let fld = default_seq_fold(()); - let folded = fld.fold_crate(fld, doc); - assert doc == folded; - } +fn default_seq_fold_constlist( + fold: fold, + list: doc::constlist +) -> doc::constlist { + doc::constlist(vec::map(*list) {|doc| + fold.fold_const(fold, doc) + }) +} + +#[test] +fn default_fold_should_produce_same_doc() { + let source = "mod a { fn b() { } mod c { fn d() { } } }"; + let ast = parse::from_str(source); + let doc = extract::extract(ast, ""); + let fld = default_seq_fold(()); + let folded = fld.fold_crate(fld, doc); + assert doc == folded; +} + +#[test] +fn default_fold_should_produce_same_consts() { + let source = "const a: int = 0;"; + let ast = parse::from_str(source); + let doc = extract::extract(ast, ""); + let fld = default_seq_fold(()); + let folded = fld.fold_crate(fld, doc); + assert doc == folded; } \ No newline at end of file -- cgit 1.4.1-3-g733a5