Skip to content

Commit 6e0bcb5

Browse files
committed
rustdoc: Eliminate AST usage in gen module
1 parent c4de718 commit 6e0bcb5

File tree

2 files changed

+28
-34
lines changed

2 files changed

+28
-34
lines changed

src/rustdoc/gen.rs

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,74 +1,56 @@
11
import std::io;
22
import std::io::writer_util;
3-
import rustc::syntax::ast;
4-
import rustc::syntax::print::pprust;
53

64
export write_markdown;
75

86
type ctxt = {
9-
ps: pprust::ps,
107
w: io::writer
118
};
129

1310
fn write_markdown(
1411
doc: doc::cratedoc,
15-
crate: @ast::crate,
1612
writer: io::writer
1713
) {
1814
let ctxt = {
19-
ps: pprust::rust_printer(writer),
2015
w: writer
2116
};
2217

2318
write_header(ctxt, doc.topmod.name);
24-
write_top_module(ctxt, crate, doc.topmod);
19+
write_top_module(ctxt, doc.topmod);
2520
}
2621

2722
fn write_top_module(
2823
ctxt: ctxt,
29-
crate: @ast::crate,
3024
moddoc: doc::moddoc
3125
) {
32-
write_mod_contents(ctxt, crate, moddoc);
26+
write_mod_contents(ctxt, moddoc);
3327
}
3428

3529
fn write_mod(
3630
ctxt: ctxt,
37-
crate: @ast::crate,
3831
moddoc: doc::moddoc
3932
) {
40-
write_mod_contents(ctxt, crate, moddoc);
33+
write_mod_contents(ctxt, moddoc);
4134
}
4235

4336
fn write_mod_contents(
4437
ctxt: ctxt,
45-
crate: @ast::crate,
4638
moddoc: doc::moddoc
4739
) {
4840
for fndoc in *moddoc.fns {
49-
write_fn(ctxt, crate, fndoc);
41+
write_fn(ctxt, fndoc);
5042
}
5143

5244
for moddoc in *moddoc.mods {
53-
write_mod(ctxt, crate, moddoc);
45+
write_mod(ctxt, moddoc);
5446
}
5547
}
5648

5749
fn write_fn(
5850
ctxt: ctxt,
59-
crate: @ast::crate,
6051
fndoc: doc::fndoc
6152
) {
62-
import rustc::middle::ast_map;
63-
64-
let map = ast_map::map_crate(*crate);
65-
let decl = alt map.get(fndoc.id) {
66-
ast_map::node_item(@{
67-
node: ast::item_fn(decl, _, _), _
68-
}) { decl }
69-
};
70-
71-
write_fndoc(ctxt, fndoc.name, fndoc, decl);
53+
write_fndoc(ctxt, fndoc.name, fndoc);
7254
}
7355

7456
#[doc(
@@ -87,7 +69,7 @@ fn write_header(ctxt: ctxt, name: str) {
8769
doc = "Function docs extracted from attributes",
8870
_fn = "AST object representing this function")
8971
)]
90-
fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc, decl: ast::fn_decl) {
72+
fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc) {
9173
ctxt.w.write_line("## Function `" + ident + "`");
9274
ctxt.w.write_line(doc.brief);
9375
alt doc.desc {
@@ -102,22 +84,33 @@ fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc, decl: ast::fn_decl) {
10284
ctxt.w.write_str("### Argument `" + arg + "`: ");
10385
ctxt.w.write_str(desc)
10486
}
105-
ctxt.w.write_line("### Returns `" + pprust::ty_to_str(decl.output) + "`");
10687
alt doc.return {
107-
some({desc: some(d), _}) { ctxt.w.write_line(d); }
108-
_ { }
88+
some(doc) {
89+
alt doc.ty {
90+
some(ty) {
91+
ctxt.w.write_line("### Returns `" + ty + "`");
92+
alt doc.desc {
93+
some(d) {
94+
ctxt.w.write_line(d);
95+
}
96+
none. { }
97+
}
98+
}
99+
none. { fail "unimplemented"; }
100+
}
101+
}
102+
none. { }
109103
}
110104
}
111105

112106
#[cfg(test)]
113107
mod tests {
114108
fn write_markdown_str(
115-
doc: doc::cratedoc,
116-
crate: @ast::crate
109+
doc: doc::cratedoc
117110
) -> str {
118111
let buffer = io::mk_mem_buffer();
119112
let writer = io::mem_buffer_writer(buffer);
120-
write_markdown(doc, crate, writer);
113+
write_markdown(doc, writer);
121114
ret io::mem_buffer_str(buffer);
122115
}
123116

@@ -126,7 +119,7 @@ mod tests {
126119
let source = "";
127120
let ast = parse::from_str(source);
128121
let doc = extract::extract(ast, "belch");
129-
let markdown = write_markdown_str(doc, ast);
122+
let markdown = write_markdown_str(doc);
130123
assert str::contains(markdown, "# Crate belch\n");
131124
}
132125

@@ -135,7 +128,7 @@ mod tests {
135128
let source = "fn func() { }";
136129
let ast = parse::from_str(source);
137130
let doc = extract::extract(ast, "");
138-
let markdown = write_markdown_str(doc, ast);
131+
let markdown = write_markdown_str(doc);
139132
assert str::contains(markdown, "## Function `func`");
140133
}
141134
}

src/rustdoc/rustdoc.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,6 @@ fn main(argv: [str]) {
2323
let default_name = source_file;
2424
let crate = parse::from_file(source_file);
2525
let doc = extract::extract(crate, default_name);
26-
gen::write_markdown(doc, crate, std::io::stdout());
26+
let doc = tystr_pass::run(doc, crate);
27+
gen::write_markdown(doc, std::io::stdout());
2728
}

0 commit comments

Comments
 (0)