Skip to content

Commit f9a6b37

Browse files
committed
rustdoc: Add fold_const and fold_constlist to fold
1 parent d66ac39 commit f9a6b37

File tree

1 file changed

+56
-17
lines changed

1 file changed

+56
-17
lines changed

src/rustdoc/fold.rs

Lines changed: 56 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
// FIXME: Random import to solve the mystery resolve bug
2+
import std;
3+
14
export fold;
25
export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist;
36
export default_seq_fold;
@@ -11,16 +14,23 @@ enum fold<T> = t<T>;
1114
type fold_crate<T> = fn~(fold: fold<T>, doc: doc::cratedoc) -> doc::cratedoc;
1215
type fold_mod<T> = fn~(fold: fold<T>, doc: doc::moddoc) -> doc::moddoc;
1316
type fold_fn<T> = fn~(fold: fold<T>, doc: doc::fndoc) -> doc::fndoc;
14-
type fold_modlist<T> = fn~(fold: fold<T>,list: doc::modlist) -> doc::modlist;
15-
type fold_fnlist<T> = fn~(fold: fold<T>,list: doc::fnlist) -> doc::fnlist;
17+
type fold_const<T> = fn~(fold: fold<T>, doc: doc::constdoc) -> doc::constdoc;
18+
type fold_modlist<T> = fn~(fold: fold<T>, list: doc::modlist) -> doc::modlist;
19+
type fold_fnlist<T> = fn~(fold: fold<T>, list: doc::fnlist) -> doc::fnlist;
20+
type fold_constlist<T> = fn~(
21+
fold: fold<T>,
22+
list: doc::constlist
23+
) -> doc::constlist;
1624

1725
type t<T> = {
1826
ctxt: T,
1927
fold_crate: fold_crate<T>,
2028
fold_mod: fold_mod<T>,
2129
fold_fn: fold_fn<T>,
30+
fold_const: fold_const<T>,
2231
fold_modlist: fold_modlist<T>,
23-
fold_fnlist: fold_fnlist<T>
32+
fold_fnlist: fold_fnlist<T>,
33+
fold_constlist: fold_constlist<T>
2434
};
2535

2636

@@ -31,16 +41,20 @@ fn mk_fold<T:copy>(
3141
fold_crate: fold_crate<T>,
3242
fold_mod: fold_mod<T>,
3343
fold_fn: fold_fn<T>,
44+
fold_const: fold_const<T>,
3445
fold_modlist: fold_modlist<T>,
35-
fold_fnlist: fold_fnlist<T>
46+
fold_fnlist: fold_fnlist<T>,
47+
fold_constlist: fold_constlist<T>
3648
) -> fold<T> {
3749
fold({
3850
ctxt: ctxt,
3951
fold_crate: fold_crate,
4052
fold_mod: fold_mod,
4153
fold_fn: fold_fn,
54+
fold_const: fold_const,
4255
fold_modlist: fold_modlist,
43-
fold_fnlist: fold_fnlist
56+
fold_fnlist: fold_fnlist,
57+
fold_constlist: fold_constlist
4458
})
4559
}
4660

@@ -50,8 +64,10 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
5064
{|f, d| default_seq_fold_crate(f, d)},
5165
{|f, d| default_seq_fold_mod(f, d)},
5266
{|f, d| default_seq_fold_fn(f, d)},
67+
{|f, d| default_seq_fold_const(f, d)},
5368
{|f, d| default_seq_fold_modlist(f, d)},
54-
{|f, d| default_seq_fold_fnlist(f, d)}
69+
{|f, d| default_seq_fold_fnlist(f, d)},
70+
{|f, d| default_seq_fold_constlist(f, d)}
5571
)
5672
}
5773

@@ -82,6 +98,13 @@ fn default_seq_fold_fn<T>(
8298
doc
8399
}
84100

101+
fn default_seq_fold_const<T>(
102+
_fold: fold<T>,
103+
doc: doc::constdoc
104+
) -> doc::constdoc {
105+
doc
106+
}
107+
85108
fn default_seq_fold_modlist<T>(
86109
fold: fold<T>,
87110
list: doc::modlist
@@ -100,15 +123,31 @@ fn default_seq_fold_fnlist<T>(
100123
})
101124
}
102125

103-
#[cfg(test)]
104-
mod tests {
105-
#[test]
106-
fn default_fold_should_produce_same_doc() {
107-
let source = "mod a { fn b() { } mod c { fn d() { } } }";
108-
let ast = parse::from_str(source);
109-
let doc = extract::extract(ast, "");
110-
let fld = default_seq_fold(());
111-
let folded = fld.fold_crate(fld, doc);
112-
assert doc == folded;
113-
}
126+
fn default_seq_fold_constlist<T>(
127+
fold: fold<T>,
128+
list: doc::constlist
129+
) -> doc::constlist {
130+
doc::constlist(vec::map(*list) {|doc|
131+
fold.fold_const(fold, doc)
132+
})
133+
}
134+
135+
#[test]
136+
fn default_fold_should_produce_same_doc() {
137+
let source = "mod a { fn b() { } mod c { fn d() { } } }";
138+
let ast = parse::from_str(source);
139+
let doc = extract::extract(ast, "");
140+
let fld = default_seq_fold(());
141+
let folded = fld.fold_crate(fld, doc);
142+
assert doc == folded;
143+
}
144+
145+
#[test]
146+
fn default_fold_should_produce_same_consts() {
147+
let source = "const a: int = 0;";
148+
let ast = parse::from_str(source);
149+
let doc = extract::extract(ast, "");
150+
let fld = default_seq_fold(());
151+
let folded = fld.fold_crate(fld, doc);
152+
assert doc == folded;
114153
}

0 commit comments

Comments
 (0)