Skip to content

Commit 98c31aa

Browse files
committed
rustdoc: Time passes
1 parent 7e9aa6c commit 98c31aa

15 files changed

+113
-47
lines changed

src/rustdoc/attr_pass.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import rustc::middle::ast_map;
1212
export mk_pass;
1313

1414
fn mk_pass() -> pass {
15-
run
15+
{
16+
name: "attr",
17+
f: run
18+
}
1619
}
1720

1821
fn run(
@@ -198,7 +201,7 @@ fn should_extract_fn_return_attributes() {
198201
let source = "#[doc(return = \"what\")] fn a() -> int { }";
199202
astsrv::from_str(source) {|srv|
200203
let doc = extract::from_srv(srv, "");
201-
let doc = tystr_pass::mk_pass()(srv, doc);
204+
let doc = tystr_pass::mk_pass().f(srv, doc);
202205
let fold = fold::default_any_fold(srv);
203206
let doc = fold_fn(fold, doc.topmod.fns()[0]);
204207
assert doc.return.desc == some("what");
@@ -210,7 +213,7 @@ fn should_preserve_fn_sig() {
210213
let source = "fn a() -> int { }";
211214
astsrv::from_str(source) {|srv|
212215
let doc = extract::from_srv(srv, "");
213-
let doc = tystr_pass::mk_pass()(srv, doc);
216+
let doc = tystr_pass::mk_pass().f(srv, doc);
214217
let fold = fold::default_any_fold(srv);
215218
let doc = fold_fn(fold, doc.topmod.fns()[0]);
216219
assert doc.sig == some("fn a() -> int");

src/rustdoc/desc_pass.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
export mk_pass;
44

55
fn mk_pass(op: fn~(str) -> str) -> pass {
6-
fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
7-
run(srv, doc, op)
6+
{
7+
name: "desc",
8+
f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
9+
run(srv, doc, op)
10+
}
811
}
912
}
1013

@@ -284,8 +287,8 @@ mod test {
284287
fn mk_doc(source: str) -> doc::cratedoc {
285288
astsrv::from_str(source) {|srv|
286289
let doc = extract::from_srv(srv, "");
287-
let doc = attr_pass::mk_pass()(srv, doc);
288-
mk_pass({|s| str::trim(s)})(srv, doc)
290+
let doc = attr_pass::mk_pass().f(srv, doc);
291+
mk_pass({|s| str::trim(s)}).f(srv, doc)
289292
}
290293
}
291294
}

src/rustdoc/desc_to_brief_pass.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ is interpreted as the brief description.
1010
export mk_pass;
1111

1212
fn mk_pass() -> pass {
13-
run
13+
{
14+
name: "desc_to_brief",
15+
f: run
16+
}
1417
}
1518

1619
fn run(
@@ -149,7 +152,7 @@ mod test {
149152
fn mk_doc(source: str) -> doc::cratedoc {
150153
astsrv::from_str(source) {|srv|
151154
let doc = extract::from_srv(srv, "");
152-
let doc = attr_pass::mk_pass()(srv, doc);
155+
let doc = attr_pass::mk_pass().f(srv, doc);
153156
run(srv, doc)
154157
}
155158
}

src/rustdoc/markdown_pass.rs

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export mk_pass;
1111
fn mk_pass(
1212
give_writer: fn~(fn(io::writer))
1313
) -> pass {
14-
fn~(
14+
let f = fn~(
1515
srv: astsrv::srv,
1616
doc: doc::cratedoc
1717
) -> doc::cratedoc {
@@ -32,11 +32,18 @@ fn mk_pass(
3232
// Sort the items so mods come last. All mods will be
3333
// output at the same header level so sorting mods last
3434
// makes the headers come out nested correctly.
35-
let sorted_doc = sort_pass::mk_pass(mods_last)(srv, doc);
35+
let sorted_doc = sort_pass::mk_pass(
36+
"mods last", mods_last
37+
).f(srv, doc);
3638

3739
write_markdown(sorted_doc, writer);
3840
}
3941
doc
42+
};
43+
44+
{
45+
name: "markdown",
46+
f: f
4047
}
4148
}
4249

@@ -820,11 +827,11 @@ mod test {
820827
astsrv::from_str(source) {|srv|
821828
let doc = extract::from_srv(srv, "");
822829
#debug("doc (extract): %?", doc);
823-
let doc = tystr_pass::mk_pass()(srv, doc);
830+
let doc = tystr_pass::mk_pass().f(srv, doc);
824831
#debug("doc (tystr): %?", doc);
825-
let doc = path_pass::mk_pass()(srv, doc);
832+
let doc = path_pass::mk_pass().f(srv, doc);
826833
#debug("doc (path): %?", doc);
827-
let doc = attr_pass::mk_pass()(srv, doc);
834+
let doc = attr_pass::mk_pass().f(srv, doc);
828835
#debug("doc (attr): %?", doc);
829836
(srv, doc)
830837
}
@@ -858,15 +865,15 @@ mod test {
858865
let result = io::mem_buffer_str(buffer);
859866
comm::send(chan, result);
860867
};
861-
pass(srv, doc);
868+
pass.f(srv, doc);
862869
ret comm::recv(port);
863870
}
864871

865872
#[test]
866873
fn write_markdown_should_write_crate_header() {
867874
astsrv::from_str("") {|srv|
868875
let doc = extract::from_srv(srv, "belch");
869-
let doc = attr_pass::mk_pass()(srv, doc);
876+
let doc = attr_pass::mk_pass().f(srv, doc);
870877
let markdown = write_markdown_str(doc);
871878
assert str::contains(markdown, "# Crate belch");
872879
}

src/rustdoc/path_pass.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
export mk_pass;
44

5-
fn mk_pass() -> pass { run }
5+
fn mk_pass() -> pass {
6+
{
7+
name: "path",
8+
f: run
9+
}
10+
}
611

712
type ctxt = {
813
srv: astsrv::srv,

src/rustdoc/prune_undoc_details_pass.rs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
export mk_pass;
55

66
fn mk_pass() -> pass {
7-
run
7+
{
8+
name: "prune_undoc_details",
9+
f: run
10+
}
811
}
912

1013
fn run(
@@ -66,8 +69,8 @@ fn should_elide_undocumented_return_values() {
6669
let source = "#[doc = \"fonz\"] fn a() -> int { }";
6770
astsrv::from_str(source) {|srv|
6871
let doc = extract::from_srv(srv, "");
69-
let doc = tystr_pass::mk_pass()(srv, doc);
70-
let doc = attr_pass::mk_pass()(srv, doc);
72+
let doc = tystr_pass::mk_pass().f(srv, doc);
73+
let doc = attr_pass::mk_pass().f(srv, doc);
7174
let doc = run(srv, doc);
7275
assert doc.topmod.fns()[0].return.ty == none;
7376
}
@@ -157,7 +160,7 @@ mod test {
157160
fn mk_doc(source: str) -> doc::cratedoc {
158161
astsrv::from_str(source) {|srv|
159162
let doc = extract::from_srv(srv, "");
160-
let doc = attr_pass::mk_pass()(srv, doc);
163+
let doc = attr_pass::mk_pass().f(srv, doc);
161164
run(srv, doc)
162165
}
163166
}

src/rustdoc/prune_undoc_items_pass.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
export mk_pass;
44

55
fn mk_pass() -> pass {
6-
run
6+
{
7+
name: "prune_undoc_items",
8+
f: run
9+
}
710
}
811

912
type ctxt = {
@@ -367,7 +370,7 @@ mod test {
367370
fn mk_doc(source: str) -> doc::cratedoc {
368371
astsrv::from_str(source) {|srv|
369372
let doc = extract::from_srv(srv, "");
370-
let doc = attr_pass::mk_pass()(srv, doc);
373+
let doc = attr_pass::mk_pass().f(srv, doc);
371374
run(srv, doc)
372375
}
373376
}

src/rustdoc/prune_unexported_pass.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import rustc::middle::ast_map;
77
export mk_pass;
88

99
fn mk_pass() -> pass {
10-
run
10+
{
11+
name: "prune_unexperted",
12+
f: run
13+
}
1114
}
1215

1316
fn run(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
@@ -232,7 +235,7 @@ fn should_not_prune_reexports() {
232235
fn mk_doc(source: str) -> doc::cratedoc {
233236
astsrv::from_str(source) {|srv|
234237
let doc = extract::from_srv(srv, "");
235-
let doc = reexport_pass::mk_pass()(srv, doc);
238+
let doc = reexport_pass::mk_pass().f(srv, doc);
236239
run(srv, doc)
237240
}
238241
}

src/rustdoc/reexport_pass.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ import rustc::util::common;
88
export mk_pass;
99

1010
fn mk_pass() -> pass {
11-
run
11+
{
12+
name: "reexport",
13+
f: run
14+
}
1215
}
1316

1417
type def_set = map::set<ast::def_id>;
@@ -332,10 +335,10 @@ fn should_duplicate_multiple_reexported_items() {
332335
}";
333336
astsrv::from_str(source) {|srv|
334337
let doc = extract::from_srv(srv, "");
335-
let doc = path_pass::mk_pass()(srv, doc);
338+
let doc = path_pass::mk_pass().f(srv, doc);
336339
let doc = run(srv, doc);
337340
// Reexports may not be in any specific order
338-
let doc = sort_item_name_pass::mk_pass()(srv, doc);
341+
let doc = sort_item_name_pass::mk_pass().f(srv, doc);
339342
assert doc.topmod.mods()[1].fns()[0].name() == "b";
340343
assert doc.topmod.mods()[1].fns()[1].name() == "c";
341344
}
@@ -354,7 +357,7 @@ fn should_reexport_in_topmod() {
354357
fn mk_doc(source: str) -> doc::cratedoc {
355358
astsrv::from_str(source) {|srv|
356359
let doc = extract::from_srv(srv, "core");
357-
let doc = path_pass::mk_pass()(srv, doc);
360+
let doc = path_pass::mk_pass().f(srv, doc);
358361
run(srv, doc)
359362
}
360363
}
@@ -385,7 +388,7 @@ mod test {
385388
fn mk_doc(source: str) -> doc::cratedoc {
386389
astsrv::from_str(source) {|srv|
387390
let doc = extract::from_srv(srv, "");
388-
let doc = path_pass::mk_pass()(srv, doc);
391+
let doc = path_pass::mk_pass().f(srv, doc);
389392
run(srv, doc)
390393
}
391394
}

src/rustdoc/rustdoc.rs

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ import doc::item;
77
import doc::util;
88

99
#[doc = "A single operation on the document model"]
10-
type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc;
10+
type pass = {
11+
name: str,
12+
f: fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc
13+
};
1114

1215
fn run_passes(
1316
srv: astsrv::srv,
@@ -36,7 +39,9 @@ fn run_passes(
3639
log(debug, #fmt("pass #%d", passno));
3740
passno += 1;
3841
log(debug, doc);
39-
pass(srv, doc)
42+
time(pass.name) {||
43+
pass.f(srv, doc)
44+
}
4045
}
4146
}
4247

@@ -72,7 +77,16 @@ fn test_run_passes() {
7277
}
7378
let source = "";
7479
astsrv::from_str(source) {|srv|
75-
let passes = [pass1, pass2];
80+
let passes = [
81+
{
82+
name: "",
83+
f: pass1
84+
},
85+
{
86+
name: "",
87+
f: pass2
88+
}
89+
];
7690
let doc = extract::from_srv(srv, "one");
7791
let doc = run_passes(srv, doc, passes);
7892
assert doc.topmod.name() == "onetwothree";
@@ -90,12 +104,25 @@ fn main(argv: [str]) {
90104
run(source_file);
91105
}
92106

107+
fn time<T>(what: str, f: fn() -> T) -> T {
108+
let start = std::time::precise_time_s();
109+
let rv = f();
110+
let end = std::time::precise_time_s();
111+
#info("time: %3.3f s %s", end - start, what);
112+
ret rv;
113+
}
114+
93115
#[doc = "Runs rustdoc over the given file"]
94116
fn run(source_file: str) {
95117

96118
let default_name = source_file;
97119
astsrv::from_file(source_file) {|srv|
98-
let doc = extract::from_srv(srv, default_name);
120+
time("wait") {||
121+
astsrv::exec(srv) {|_ctxt| () }
122+
};
123+
let doc = time("extract") {||
124+
extract::from_srv(srv, default_name)
125+
};
99126
run_passes(srv, doc, [
100127
reexport_pass::mk_pass(),
101128
prune_unexported_pass::mk_pass(),

src/rustdoc/sort_item_name_pass.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
export mk_pass;
44

55
fn mk_pass() -> pass {
6-
sort_pass::mk_pass { |item1, item2|
6+
sort_pass::mk_pass("sort_item_name") { |item1, item2|
77
str::le(item1.name(), item2.name())
88
}
99
}
@@ -13,7 +13,7 @@ fn test() {
1313
let source = "mod z { } fn y() { }";
1414
astsrv::from_str(source) {|srv|
1515
let doc = extract::from_srv(srv, "");
16-
let doc = mk_pass()(srv, doc);
16+
let doc = mk_pass().f(srv, doc);
1717
assert doc.topmod.items[0].name() == "y";
1818
assert doc.topmod.items[1].name() == "z";
1919
}

src/rustdoc/sort_item_type_pass.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
export mk_pass;
44

55
fn mk_pass() -> pass {
6-
sort_pass::mk_pass { |item1, item2|
6+
sort_pass::mk_pass("sort_item_type") { |item1, item2|
77
fn score(item: doc::itemtag) -> int {
88
alt item {
99
doc::consttag(_) { 0 }
@@ -36,7 +36,7 @@ fn test() {
3636
type itype = int;";
3737
astsrv::from_str(source) {|srv|
3838
let doc = extract::from_srv(srv, "");
39-
let doc = mk_pass()(srv, doc);
39+
let doc = mk_pass().f(srv, doc);
4040
assert doc.topmod.items[0].name() == "iconst";
4141
assert doc.topmod.items[1].name() == "itype";
4242
assert doc.topmod.items[2].name() == "ienum";

0 commit comments

Comments
 (0)