Skip to content

Commit fc9b55d

Browse files
committed
rustdoc: Write a new file for each page
1 parent fbd8a76 commit fc9b55d

File tree

2 files changed

+47
-15
lines changed

2 files changed

+47
-15
lines changed

src/rustdoc/markdown_pass.rs

Lines changed: 46 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -82,14 +82,41 @@ fn write_markdown(
8282
doc: doc::doc,
8383
writer_factory: writer_factory
8484
) {
85-
let ctxt = {
86-
w: writer_factory(doc::cratepage(doc.cratedoc()))
87-
};
85+
for page in doc.pages {
86+
let ctxt = {
87+
w: writer_factory(page)
88+
};
89+
write_page(ctxt, page);
90+
}
91+
}
8892

89-
write_crate(ctxt, doc.cratedoc());
93+
fn write_page(ctxt: ctxt, page: doc::page) {
94+
alt page {
95+
doc::cratepage(doc) {
96+
write_crate(ctxt, doc);
97+
}
98+
doc::itempage(doc) {
99+
write_item(ctxt, doc);
100+
}
101+
}
90102
ctxt.w.write_done();
91103
}
92104

105+
#[test]
106+
fn should_request_new_writer_for_each_page() {
107+
// This port will send us a (page, str) pair for every writer
108+
// that was created
109+
let (writer_factory, po) = markdown_writer::future_writer_factory();
110+
let (srv, doc) = test::create_doc_srv("mod a { }");
111+
// Split the document up into pages
112+
let doc = page_pass::mk_pass(config::doc_per_mod).f(srv, doc);
113+
write_markdown(doc, writer_factory);
114+
// We expect two pages to have been written
115+
iter::repeat(2u) {||
116+
comm::recv(po);
117+
}
118+
}
119+
93120
enum hlvl {
94121
h1 = 1,
95122
h2 = 2,
@@ -218,17 +245,21 @@ fn write_mod_contents(
218245
}
219246

220247
for itemtag in doc.items {
221-
alt itemtag {
222-
doc::modtag(moddoc) { write_mod(ctxt, moddoc) }
223-
doc::nmodtag(nmoddoc) { write_nmod(ctxt, nmoddoc) }
224-
doc::fntag(fndoc) { write_fn(ctxt, fndoc) }
225-
doc::consttag(constdoc) { write_const(ctxt, constdoc) }
226-
doc::enumtag(enumdoc) { write_enum(ctxt, enumdoc) }
227-
doc::restag(resdoc) { write_res(ctxt, resdoc) }
228-
doc::ifacetag(ifacedoc) { write_iface(ctxt, ifacedoc) }
229-
doc::impltag(impldoc) { write_impl(ctxt, impldoc) }
230-
doc::tytag(tydoc) { write_type(ctxt, tydoc) }
231-
}
248+
write_item(ctxt, itemtag);
249+
}
250+
}
251+
252+
fn write_item(ctxt: ctxt, doc: doc::itemtag) {
253+
alt doc {
254+
doc::modtag(moddoc) { write_mod(ctxt, moddoc) }
255+
doc::nmodtag(nmoddoc) { write_nmod(ctxt, nmoddoc) }
256+
doc::fntag(fndoc) { write_fn(ctxt, fndoc) }
257+
doc::consttag(constdoc) { write_const(ctxt, constdoc) }
258+
doc::enumtag(enumdoc) { write_enum(ctxt, enumdoc) }
259+
doc::restag(resdoc) { write_res(ctxt, resdoc) }
260+
doc::ifacetag(ifacedoc) { write_iface(ctxt, ifacedoc) }
261+
doc::impltag(impldoc) { write_impl(ctxt, impldoc) }
262+
doc::tytag(tydoc) { write_type(ctxt, tydoc) }
232263
}
233264
}
234265

src/rustdoc/rustdoc.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ fn run(config: config::config) {
152152
sort_item_name_pass::mk_pass(),
153153
sort_item_type_pass::mk_pass(),
154154
markdown_index_pass::mk_pass(),
155+
page_pass::mk_pass(config.output_style),
155156
markdown_pass::mk_pass(
156157
markdown_writer::make_writer_factory(config)
157158
)

0 commit comments

Comments
 (0)