Skip to content

Commit c32cde1

Browse files
committed
rustdoc: Cleanup
1 parent 3c2b611 commit c32cde1

File tree

3 files changed

+120
-98
lines changed

3 files changed

+120
-98
lines changed

src/rustdoc/pass.rs

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/// A single operation on the document model
2+
pub type Pass = {
3+
name: ~str,
4+
f: fn~(srv: astsrv::Srv, doc: doc::Doc) -> doc::Doc
5+
};
6+
7+
pub fn run_passes(
8+
srv: astsrv::Srv,
9+
doc: doc::Doc,
10+
passes: ~[Pass]
11+
) -> doc::Doc {
12+
let mut passno = 0;
13+
do vec::foldl(doc, passes) |doc, pass| {
14+
log(debug, fmt!("pass #%d", passno));
15+
passno += 1;
16+
log(debug, doc);
17+
do time(pass.name) {
18+
pass.f(srv, doc)
19+
}
20+
}
21+
}
22+
23+
#[test]
24+
fn test_run_passes() {
25+
fn pass1(
26+
_srv: astsrv::Srv,
27+
doc: doc::Doc
28+
) -> doc::Doc {
29+
doc::Doc_({
30+
pages: ~[
31+
doc::CratePage({
32+
topmod: doc::ModDoc_({
33+
item: {
34+
name: doc.cratemod().name() + ~"two",
35+
.. doc.cratemod().item
36+
},
37+
items: ~[],
38+
index: None
39+
})
40+
})
41+
]
42+
})
43+
}
44+
fn pass2(
45+
_srv: astsrv::Srv,
46+
doc: doc::Doc
47+
) -> doc::Doc {
48+
doc::Doc_({
49+
pages: ~[
50+
doc::CratePage({
51+
topmod: doc::ModDoc_({
52+
item: {
53+
name: doc.cratemod().name() + ~"three",
54+
.. doc.cratemod().item
55+
},
56+
items: ~[],
57+
index: None
58+
})
59+
})
60+
]
61+
})
62+
}
63+
let source = ~"";
64+
do astsrv::from_str(source) |srv| {
65+
let passes = ~[
66+
{
67+
name: ~"",
68+
f: pass1
69+
},
70+
{
71+
name: ~"",
72+
f: pass2
73+
}
74+
];
75+
let doc = extract::from_srv(srv, ~"one");
76+
let doc = run_passes(srv, doc, passes);
77+
assert doc.cratemod().name() == ~"onetwothree";
78+
}
79+
}

src/rustdoc/rustdoc.rc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@
1010
#[crate_type = "bin"];
1111

1212
#[no_core];
13-
1413
#[legacy_modes];
1514

16-
#[allow(vecs_implicitly_copyable,
17-
non_implicitly_copyable_typarams)];
15+
#[allow(vecs_implicitly_copyable)];
16+
#[allow(non_implicitly_copyable_typarams)];
1817

1918
extern mod core(vers = "0.4");
2019
extern mod std(vers = "0.4");
@@ -24,6 +23,7 @@ extern mod syntax(vers = "0.4");
2423
use core::*;
2524
use std::par;
2625

26+
mod pass;
2727
mod config;
2828
mod parse;
2929
mod extract;

src/rustdoc/rustdoc.rs

Lines changed: 38 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -1,88 +1,7 @@
1-
//! Some utility interfaces
2-
31
use doc::ItemUtils;
42
use doc::Item;
5-
use doc::util;
6-
7-
/// A single operation on the document model
8-
type Pass = {
9-
name: ~str,
10-
f: fn~(srv: astsrv::Srv, doc: doc::Doc) -> doc::Doc
11-
};
12-
13-
fn run_passes(
14-
srv: astsrv::Srv,
15-
doc: doc::Doc,
16-
passes: ~[Pass]
17-
) -> doc::Doc {
18-
let mut passno = 0;
19-
do vec::foldl(doc, passes) |doc, pass| {
20-
log(debug, fmt!("pass #%d", passno));
21-
passno += 1;
22-
log(debug, doc);
23-
do time(pass.name) {
24-
pass.f(srv, doc)
25-
}
26-
}
27-
}
28-
29-
#[test]
30-
fn test_run_passes() {
31-
fn pass1(
32-
_srv: astsrv::Srv,
33-
doc: doc::Doc
34-
) -> doc::Doc {
35-
doc::Doc_({
36-
pages: ~[
37-
doc::CratePage({
38-
topmod: doc::ModDoc_({
39-
item: {
40-
name: doc.cratemod().name() + ~"two",
41-
.. doc.cratemod().item
42-
},
43-
items: ~[],
44-
index: None
45-
})
46-
})
47-
]
48-
})
49-
}
50-
fn pass2(
51-
_srv: astsrv::Srv,
52-
doc: doc::Doc
53-
) -> doc::Doc {
54-
doc::Doc_({
55-
pages: ~[
56-
doc::CratePage({
57-
topmod: doc::ModDoc_({
58-
item: {
59-
name: doc.cratemod().name() + ~"three",
60-
.. doc.cratemod().item
61-
},
62-
items: ~[],
63-
index: None
64-
})
65-
})
66-
]
67-
})
68-
}
69-
let source = ~"";
70-
do astsrv::from_str(source) |srv| {
71-
let passes = ~[
72-
{
73-
name: ~"",
74-
f: pass1
75-
},
76-
{
77-
name: ~"",
78-
f: pass2
79-
}
80-
];
81-
let doc = extract::from_srv(srv, ~"one");
82-
let doc = run_passes(srv, doc, passes);
83-
assert doc.cratemod().name() == ~"onetwothree";
84-
}
85-
}
3+
use pass::Pass;
4+
use config::Config;
865

876
fn main(args: ~[~str]) {
887

@@ -92,8 +11,8 @@ fn main(args: ~[~str]) {
9211
}
9312

9413
let config = match config::parse_config(args) {
95-
result::Ok(config) => config,
96-
result::Err(err) => {
14+
Ok(config) => config,
15+
Err(err) => {
9716
io::println(fmt!("error: %s", err));
9817
return;
9918
}
@@ -102,43 +21,67 @@ fn main(args: ~[~str]) {
10221
run(config);
10322
}
10423

105-
fn time<T>(what: ~str, f: fn() -> T) -> T {
106-
let start = std::time::precise_time_s();
107-
let rv = f();
108-
let end = std::time::precise_time_s();
109-
info!("time: %3.3f s %s", end - start, what);
110-
return rv;
111-
}
112-
11324
/// Runs rustdoc over the given file
114-
fn run(config: config::Config) {
25+
fn run(config: Config) {
11526

11627
let source_file = config.input_crate;
28+
29+
// Create an AST service from the source code
11730
do astsrv::from_file(source_file.to_str()) |srv| {
31+
32+
// Just time how long it takes for the AST to become available
11833
do time(~"wait_ast") {
11934
do astsrv::exec(srv) |_ctxt| { }
12035
};
36+
37+
// Extract the initial doc tree from the AST. This contains
38+
// just names and node ids.
12139
let doc = time(~"extract", || {
12240
let default_name = source_file;
12341
extract::from_srv(srv, default_name.to_str())
12442
});
125-
run_passes(srv, doc, ~[
43+
44+
// Refine and publish the document
45+
pass::run_passes(srv, doc, ~[
46+
// Generate type and signature strings
12647
tystr_pass::mk_pass(),
48+
// Record the full paths to various nodes
12749
path_pass::mk_pass(),
50+
// Extract the docs attributes and attach them to doc nodes
12851
attr_pass::mk_pass(),
52+
// Perform various text escaping
12953
escape_pass::mk_pass(),
54+
// Remove things marked doc(hidden)
13055
prune_hidden_pass::mk_pass(),
56+
// Extract brief documentation from the full descriptions
13157
desc_to_brief_pass::mk_pass(),
58+
// Massage the text to remove extra indentation
13259
unindent_pass::mk_pass(),
60+
// Split text into multiple sections according to headers
13361
sectionalize_pass::mk_pass(),
62+
// Trim extra spaces from text
13463
trim_pass::mk_pass(),
64+
// Sort items by name
13565
sort_item_name_pass::mk_pass(),
66+
// Sort items again by kind
13667
sort_item_type_pass::mk_pass(),
68+
// Create indexes appropriate for markdown
13769
markdown_index_pass::mk_pass(config),
70+
// Break the document into pages if required by the
71+
// output format
13872
page_pass::mk_pass(config.output_style),
73+
// Render
13974
markdown_pass::mk_pass(
14075
markdown_writer::make_writer_factory(config)
14176
)
14277
]);
14378
}
14479
}
80+
81+
fn time<T>(what: ~str, f: fn() -> T) -> T {
82+
let start = std::time::precise_time_s();
83+
let rv = f();
84+
let end = std::time::precise_time_s();
85+
info!("time: %3.3f s %s", end - start, what);
86+
return rv;
87+
}

0 commit comments

Comments
 (0)