about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-25 16:56:28 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-25 16:56:28 -0800
commit1586cce0ea1082f4716b50520ed9cb40941f7fad (patch)
tree3c962d4112f058f24cb0e796d7bcaefac5475884 /src
parente946792a78590df3972fc4a9827d5e94d333d055 (diff)
rustdoc: Add enum folding
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/fold.rs49
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