Skip to content

Commit 2ac6dbc

Browse files
committed
rustdoc: Refactor markdown_pass
1 parent 2dd5b3a commit 2ac6dbc

File tree

3 files changed

+47
-34
lines changed

3 files changed

+47
-34
lines changed

src/rustdoc/config.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import std::getopts;
33
export output_format::{};
44
export output_style::{};
55
export config;
6+
export default_config;
67
export parse_config;
78
export usage;
89

src/rustdoc/markdown_pass.rs

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -5,40 +5,19 @@ import std::io::writer_util;
55

66
export mk_pass;
77

8+
fn mk_pass(config: config::config) -> pass {
9+
mk_pass_(config, {|f| f(std::io::stdout()) })
10+
}
11+
812
// FIXME: This is a really convoluted interface to work around trying
913
// to get a writer into a unique closure and then being able to test
1014
// what was written afterward
11-
fn mk_pass(
15+
fn mk_pass_(
16+
config: config::config,
1217
give_writer: fn~(fn(io::writer))
1318
) -> pass {
14-
let f = fn~(
15-
srv: astsrv::srv,
16-
doc: doc::cratedoc
17-
) -> doc::cratedoc {
18-
19-
fn mods_last(item1: doc::itemtag, item2: doc::itemtag) -> bool {
20-
fn is_mod(item: doc::itemtag) -> bool {
21-
alt item {
22-
doc::modtag(_) { true }
23-
_ { false }
24-
}
25-
}
26-
27-
let lteq = !is_mod(item1) || is_mod(item2);
28-
lteq
29-
}
30-
31-
give_writer {|writer|
32-
// Sort the items so mods come last. All mods will be
33-
// output at the same header level so sorting mods last
34-
// makes the headers come out nested correctly.
35-
let sorted_doc = sort_pass::mk_pass(
36-
"mods last", mods_last
37-
).f(srv, doc);
38-
39-
write_markdown(sorted_doc, writer);
40-
}
41-
doc
19+
let f = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
20+
run(srv, doc, config, give_writer)
4221
};
4322

4423
{
@@ -47,6 +26,38 @@ fn mk_pass(
4726
}
4827
}
4928

29+
fn run(
30+
srv: astsrv::srv,
31+
doc: doc::cratedoc,
32+
_config: config::config,
33+
give_writer: fn~(fn(io::writer))
34+
) -> doc::cratedoc {
35+
36+
fn mods_last(item1: doc::itemtag, item2: doc::itemtag) -> bool {
37+
fn is_mod(item: doc::itemtag) -> bool {
38+
alt item {
39+
doc::modtag(_) { true }
40+
_ { false }
41+
}
42+
}
43+
44+
let lteq = !is_mod(item1) || is_mod(item2);
45+
lteq
46+
}
47+
48+
give_writer {|writer|
49+
// Sort the items so mods come last. All mods will be
50+
// output at the same header level so sorting mods last
51+
// makes the headers come out nested correctly.
52+
let sorted_doc = sort_pass::mk_pass(
53+
"mods last", mods_last
54+
).f(srv, doc);
55+
56+
write_markdown(sorted_doc, writer);
57+
}
58+
doc
59+
}
60+
5061
#[test]
5162
fn should_write_modules_last() {
5263
/*
@@ -858,7 +869,7 @@ mod test {
858869
let port = comm::port();
859870
let chan = comm::chan(port);
860871

861-
let pass = mk_pass {|f|
872+
let pass = mk_pass_(config::default_config("")) {|f|
862873
let buffer = io::mk_mem_buffer();
863874
let writer = io::mem_buffer_writer(buffer);
864875
f(writer);

src/rustdoc/rustdoc.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ fn main(args: [str]) {
108108
}
109109
};
110110

111-
run(config.input_crate);
111+
run(config);
112112
}
113113

114114
fn time<T>(what: str, f: fn() -> T) -> T {
@@ -120,14 +120,15 @@ fn time<T>(what: str, f: fn() -> T) -> T {
120120
}
121121

122122
#[doc = "Runs rustdoc over the given file"]
123-
fn run(source_file: str) {
123+
fn run(config: config::config) {
124124

125-
let default_name = source_file;
125+
let source_file = config.input_crate;
126126
astsrv::from_file(source_file) {|srv|
127127
time("wait_ast") {||
128128
astsrv::exec(srv) {|_ctxt| () }
129129
};
130130
let doc = time("extract") {||
131+
let default_name = source_file;
131132
extract::from_srv(srv, default_name)
132133
};
133134
run_passes(srv, doc, [
@@ -144,7 +145,7 @@ fn run(source_file: str) {
144145
unindent_pass::mk_pass(),
145146
sort_item_name_pass::mk_pass(),
146147
sort_item_type_pass::mk_pass(),
147-
markdown_pass::mk_pass {|f| f(std::io:: stdout()) }
148+
markdown_pass::mk_pass(config)
148149
]);
149150
}
150151
}

0 commit comments

Comments
 (0)