diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-01-25 16:56:28 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-01-25 16:56:28 -0800 |
| commit | 1586cce0ea1082f4716b50520ed9cb40941f7fad (patch) | |
| tree | 3c962d4112f058f24cb0e796d7bcaefac5475884 /src | |
| parent | e946792a78590df3972fc4a9827d5e94d333d055 (diff) | |
rustdoc: Add enum folding
Diffstat (limited to 'src')
| -rw-r--r-- | src/rustdoc/fold.rs | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 85751d98a4b..943a317721a 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -16,12 +16,13 @@ type fold_crate<T> = fn~(fold: fold<T>, doc: doc::cratedoc) -> doc::cratedoc; type fold_mod<T> = fn~(fold: fold<T>, doc: doc::moddoc) -> doc::moddoc; type fold_fn<T> = fn~(fold: fold<T>, doc: doc::fndoc) -> doc::fndoc; type fold_const<T> = fn~(fold: fold<T>, doc: doc::constdoc) -> doc::constdoc; +type fold_enum<T> = fn~(fold: fold<T>, doc: doc::enumdoc) -> doc::enumdoc; type fold_modlist<T> = fn~(fold: fold<T>, list: doc::modlist) -> doc::modlist; type fold_fnlist<T> = fn~(fold: fold<T>, list: doc::fnlist) -> doc::fnlist; type fold_constlist<T> = fn~( - fold: fold<T>, - list: doc::constlist -) -> doc::constlist; + fold: fold<T>, list: doc::constlist) -> doc::constlist; +type fold_enumlist<T> = fn~( + fold: fold<T>, list: doc::enumlist) -> doc::enumlist; type t<T> = { ctxt: T, @@ -29,9 +30,11 @@ type t<T> = { fold_mod: fold_mod<T>, fold_fn: fold_fn<T>, fold_const: fold_const<T>, + fold_enum: fold_enum<T>, fold_modlist: fold_modlist<T>, fold_fnlist: fold_fnlist<T>, - fold_constlist: fold_constlist<T> + fold_constlist: fold_constlist<T>, + fold_enumlist: fold_enumlist<T> }; @@ -43,9 +46,11 @@ fn mk_fold<T:copy>( fold_mod: fold_mod<T>, fold_fn: fold_fn<T>, fold_const: fold_const<T>, + fold_enum: fold_enum<T>, fold_modlist: fold_modlist<T>, fold_fnlist: fold_fnlist<T>, - fold_constlist: fold_constlist<T> + fold_constlist: fold_constlist<T>, + fold_enumlist: fold_enumlist<T> ) -> fold<T> { fold({ ctxt: ctxt, @@ -53,9 +58,11 @@ fn mk_fold<T:copy>( fold_mod: fold_mod, fold_fn: fold_fn, fold_const: fold_const, + fold_enum: fold_enum, fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, - fold_constlist: fold_constlist + fold_constlist: fold_constlist, + fold_enumlist: fold_enumlist }) } @@ -66,9 +73,11 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> { {|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_enum(f, d)}, {|f, d| default_seq_fold_modlist(f, d)}, {|f, d| default_seq_fold_fnlist(f, d)}, - {|f, d| default_seq_fold_constlist(f, d)} + {|f, d| default_seq_fold_constlist(f, d)}, + {|f, d| default_seq_fold_enumlist(f, d)} ) } @@ -107,6 +116,13 @@ fn default_seq_fold_const<T>( doc } +fn default_seq_fold_enum<T>( + _fold: fold<T>, + doc: doc::enumdoc +) -> doc::enumdoc { + doc +} + fn default_seq_fold_modlist<T>( fold: fold<T>, list: doc::modlist @@ -134,6 +150,15 @@ fn default_seq_fold_constlist<T>( }) } +fn default_seq_fold_enumlist<T>( + fold: fold<T>, + list: doc::enumlist +) -> doc::enumlist { + doc::enumlist(vec::map(*list) {|doc| + fold.fold_enum(fold, doc) + }) +} + #[test] fn default_fold_should_produce_same_doc() { let source = "mod a { fn b() { } mod c { fn d() { } } }"; @@ -152,4 +177,14 @@ fn default_fold_should_produce_same_consts() { let fld = default_seq_fold(()); let folded = fld.fold_crate(fld, doc); assert doc == folded; +} + +#[test] +fn default_fold_should_produce_same_enums() { + let source = "enum a { b }"; + 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 |
