rustdoc: Eliminate AST usage in gen module
This commit is contained in:
parent
c4de718f37
commit
6e0bcb5bd0
2 changed files with 28 additions and 34 deletions
|
|
@ -1,74 +1,56 @@
|
|||
import std::io;
|
||||
import std::io::writer_util;
|
||||
import rustc::syntax::ast;
|
||||
import rustc::syntax::print::pprust;
|
||||
|
||||
export write_markdown;
|
||||
|
||||
type ctxt = {
|
||||
ps: pprust::ps,
|
||||
w: io::writer
|
||||
};
|
||||
|
||||
fn write_markdown(
|
||||
doc: doc::cratedoc,
|
||||
crate: @ast::crate,
|
||||
writer: io::writer
|
||||
) {
|
||||
let ctxt = {
|
||||
ps: pprust::rust_printer(writer),
|
||||
w: writer
|
||||
};
|
||||
|
||||
write_header(ctxt, doc.topmod.name);
|
||||
write_top_module(ctxt, crate, doc.topmod);
|
||||
write_top_module(ctxt, doc.topmod);
|
||||
}
|
||||
|
||||
fn write_top_module(
|
||||
ctxt: ctxt,
|
||||
crate: @ast::crate,
|
||||
moddoc: doc::moddoc
|
||||
) {
|
||||
write_mod_contents(ctxt, crate, moddoc);
|
||||
write_mod_contents(ctxt, moddoc);
|
||||
}
|
||||
|
||||
fn write_mod(
|
||||
ctxt: ctxt,
|
||||
crate: @ast::crate,
|
||||
moddoc: doc::moddoc
|
||||
) {
|
||||
write_mod_contents(ctxt, crate, moddoc);
|
||||
write_mod_contents(ctxt, moddoc);
|
||||
}
|
||||
|
||||
fn write_mod_contents(
|
||||
ctxt: ctxt,
|
||||
crate: @ast::crate,
|
||||
moddoc: doc::moddoc
|
||||
) {
|
||||
for fndoc in *moddoc.fns {
|
||||
write_fn(ctxt, crate, fndoc);
|
||||
write_fn(ctxt, fndoc);
|
||||
}
|
||||
|
||||
for moddoc in *moddoc.mods {
|
||||
write_mod(ctxt, crate, moddoc);
|
||||
write_mod(ctxt, moddoc);
|
||||
}
|
||||
}
|
||||
|
||||
fn write_fn(
|
||||
ctxt: ctxt,
|
||||
crate: @ast::crate,
|
||||
fndoc: doc::fndoc
|
||||
) {
|
||||
import rustc::middle::ast_map;
|
||||
|
||||
let map = ast_map::map_crate(*crate);
|
||||
let decl = alt map.get(fndoc.id) {
|
||||
ast_map::node_item(@{
|
||||
node: ast::item_fn(decl, _, _), _
|
||||
}) { decl }
|
||||
};
|
||||
|
||||
write_fndoc(ctxt, fndoc.name, fndoc, decl);
|
||||
write_fndoc(ctxt, fndoc.name, fndoc);
|
||||
}
|
||||
|
||||
#[doc(
|
||||
|
|
@ -87,7 +69,7 @@ fn write_header(ctxt: ctxt, name: str) {
|
|||
doc = "Function docs extracted from attributes",
|
||||
_fn = "AST object representing this function")
|
||||
)]
|
||||
fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc, decl: ast::fn_decl) {
|
||||
fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc) {
|
||||
ctxt.w.write_line("## Function `" + ident + "`");
|
||||
ctxt.w.write_line(doc.brief);
|
||||
alt doc.desc {
|
||||
|
|
@ -102,22 +84,33 @@ fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc, decl: ast::fn_decl) {
|
|||
ctxt.w.write_str("### Argument `" + arg + "`: ");
|
||||
ctxt.w.write_str(desc)
|
||||
}
|
||||
ctxt.w.write_line("### Returns `" + pprust::ty_to_str(decl.output) + "`");
|
||||
alt doc.return {
|
||||
some({desc: some(d), _}) { ctxt.w.write_line(d); }
|
||||
_ { }
|
||||
some(doc) {
|
||||
alt doc.ty {
|
||||
some(ty) {
|
||||
ctxt.w.write_line("### Returns `" + ty + "`");
|
||||
alt doc.desc {
|
||||
some(d) {
|
||||
ctxt.w.write_line(d);
|
||||
}
|
||||
none. { }
|
||||
}
|
||||
}
|
||||
none. { fail "unimplemented"; }
|
||||
}
|
||||
}
|
||||
none. { }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
fn write_markdown_str(
|
||||
doc: doc::cratedoc,
|
||||
crate: @ast::crate
|
||||
doc: doc::cratedoc
|
||||
) -> str {
|
||||
let buffer = io::mk_mem_buffer();
|
||||
let writer = io::mem_buffer_writer(buffer);
|
||||
write_markdown(doc, crate, writer);
|
||||
write_markdown(doc, writer);
|
||||
ret io::mem_buffer_str(buffer);
|
||||
}
|
||||
|
||||
|
|
@ -126,7 +119,7 @@ mod tests {
|
|||
let source = "";
|
||||
let ast = parse::from_str(source);
|
||||
let doc = extract::extract(ast, "belch");
|
||||
let markdown = write_markdown_str(doc, ast);
|
||||
let markdown = write_markdown_str(doc);
|
||||
assert str::contains(markdown, "# Crate belch\n");
|
||||
}
|
||||
|
||||
|
|
@ -135,7 +128,7 @@ mod tests {
|
|||
let source = "fn func() { }";
|
||||
let ast = parse::from_str(source);
|
||||
let doc = extract::extract(ast, "");
|
||||
let markdown = write_markdown_str(doc, ast);
|
||||
let markdown = write_markdown_str(doc);
|
||||
assert str::contains(markdown, "## Function `func`");
|
||||
}
|
||||
}
|
||||
|
|
@ -23,5 +23,6 @@ fn main(argv: [str]) {
|
|||
let default_name = source_file;
|
||||
let crate = parse::from_file(source_file);
|
||||
let doc = extract::extract(crate, default_name);
|
||||
gen::write_markdown(doc, crate, std::io::stdout());
|
||||
let doc = tystr_pass::run(doc, crate);
|
||||
gen::write_markdown(doc, std::io::stdout());
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue