about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-16 15:38:40 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-16 21:12:34 -0800
commit6e0bcb5bd0eb769d276a82134bb54857492ae03d (patch)
tree7c03ea6f5ddc6d5cdd2f80f381b9d3d3942326f6 /src/rustdoc
parentc4de718f378d6be0c52e77971045f1bff3af4664 (diff)
rustdoc: Eliminate AST usage in gen module
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/gen.rs59
-rwxr-xr-xsrc/rustdoc/rustdoc.rs3
2 files changed, 28 insertions, 34 deletions
diff --git a/src/rustdoc/gen.rs b/src/rustdoc/gen.rs
index 81945969e16..b1f511e1f6a 100644
--- a/src/rustdoc/gen.rs
+++ b/src/rustdoc/gen.rs
@@ -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`");
     }
 }
\ No newline at end of file
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index fb1c105547b..956c2d1319a 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -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());
 }