about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-26 00:35:07 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-26 11:36:29 -0800
commit91ee6afeaedd5ec73b0af90b4673e53d1becb8a7 (patch)
treebfbf05c91f800c4111c6cdc630db3ef3b36b76fe /src
parent38908581f7d34066ece145bcedcbe8bbddee9bcc (diff)
downloadrust-91ee6afeaedd5ec73b0af90b4673e53d1becb8a7.tar.gz
rust-91ee6afeaedd5ec73b0af90b4673e53d1becb8a7.zip
rustdoc: Set up the compiler session properly in prep for running resolve
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/astsrv.rs112
-rw-r--r--src/rustdoc/parse.rs17
2 files changed, 104 insertions, 25 deletions
diff --git a/src/rustdoc/astsrv.rs b/src/rustdoc/astsrv.rs
index 8bd631b945b..769c8ea96ba 100644
--- a/src/rustdoc/astsrv.rs
+++ b/src/rustdoc/astsrv.rs
@@ -7,8 +7,14 @@
      Rustdoc from its non-sendableness."
 )];
 
+import rustc::driver::session;
+import rustc::driver::driver;
+import rustc::driver::diagnostic;
 import rustc::syntax::ast;
 import rustc::middle::ast_map;
+import rustc::back::link;
+import rustc::util::filesearch;
+import rustc::front;
 
 export ctxt;
 export ctxt_handler;
@@ -29,29 +35,62 @@ type srv = {
 };
 
 fn mk_srv_from_str(source: str) -> srv {
+    let sess = build_session();
     {
-        ctxt: build_ctxt(parse::from_str(source))
+        ctxt: build_ctxt(sess, parse::from_str_sess(sess, source))
     }
 }
 
 fn mk_srv_from_file(file: str) -> srv {
+    let sess = build_session();
     {
-        ctxt: build_ctxt(parse::from_file(file))
+        ctxt: build_ctxt(sess, parse::from_file_sess(sess, file))
     }
 }
 
-fn build_ctxt(ast: @ast::crate) -> ctxt {
+fn build_ctxt(sess: session::session, ast: @ast::crate) -> ctxt {
 
     import rustc::front::config;
 
     let ast = config::strip_unconfigured_items(ast);
+    let ast = front::test::modify_for_testing(sess, ast);
+    let ast_map = ast_map::map_crate(*ast);
 
     {
         ast: ast,
-        ast_map: ast_map::map_crate(*ast)
+        ast_map: ast_map,
     }
 }
 
+fn build_session() -> session::session {
+    let sopts: @session::options = @{
+        crate_type: session::lib_crate,
+        static: false,
+        libcore: false,
+        optimize: 0u,
+        debuginfo: false,
+        extra_debuginfo: false,
+        verify: false,
+        lint_opts: [],
+        save_temps: false,
+        stats: false,
+        time_passes: false,
+        time_llvm_passes: false,
+        output_type: link::output_type_exe,
+        addl_lib_search_paths: [],
+        maybe_sysroot: none,
+        target_triple: driver::host_triple(),
+        cfg: [],
+        test: false,
+        parse_only: false,
+        no_trans: false,
+        do_gc: false,
+        no_asm_comments: false,
+        warn_unused_imports: false
+    };
+    driver::build_session(sopts, ".", diagnostic::emit)
+}
+
 #[test]
 fn should_prune_unconfigured_items() {
     let source = "#[cfg(shut_up_and_leave_me_alone)]fn a() { }";
@@ -61,6 +100,44 @@ fn should_prune_unconfigured_items() {
     }
 }
 
+#[test]
+#[ignore]
+fn srv_should_build_ast_map() {
+    // FIXME
+    /*let source = "fn a() { }";
+    let srv = mk_srv_from_str(source);
+    exec(srv) {|ctxt|
+        assert ctxt.ast_map.size() != 0u
+    };*/
+}
+
+#[test]
+#[ignore]
+fn srv_should_build_reexport_map() {
+    // FIXME
+    /*let source = "import a::b; export b; mod a { mod b { } }";
+    let srv = mk_srv_from_str(source);
+    exec(srv) {|ctxt|
+        assert ctxt.exp_map.size() != 0u
+    };*/
+}
+
+#[test]
+fn srv_should_resolve_external_crates() {
+    let source = "use std;\
+                  fn f() -> std::sha1::sha1 {\
+                  std::sha1::mk_sha1() }";
+    // Just testing that resolve doesn't crash
+    mk_srv_from_str(source);
+}
+
+#[test]
+fn srv_should_resolve_core_crate() {
+    let source = "fn a() -> option { fail }";
+    // Just testing that resolve doesn't crash
+    mk_srv_from_str(source);
+}
+
 fn exec<T>(
     srv: srv,
     f: fn~(ctxt: ctxt) -> T
@@ -68,23 +145,10 @@ fn exec<T>(
     f(srv.ctxt)
 }
 
-#[cfg(test)]
-mod tests {
-
-    #[test]
-    fn srv_should_build_ast_map() {
-        let source = "fn a() { }";
-        let srv = mk_srv_from_str(source);
-        exec(srv) {|ctxt|
-            assert ctxt.ast_map.size() != 0u
-        };
-    }
-
-    #[test]
-    fn srv_should_return_request_result() {
-        let source = "fn a() { }";
-        let srv = mk_srv_from_str(source);
-        let result = exec(srv) {|_ctxt| 1000};
-        assert result == 1000;
-    }
-}
\ No newline at end of file
+#[test]
+fn srv_should_return_request_result() {
+    let source = "fn a() { }";
+    let srv = mk_srv_from_str(source);
+    let result = exec(srv) {|_ctxt| 1000};
+    assert result == 1000;
+}
diff --git a/src/rustdoc/parse.rs b/src/rustdoc/parse.rs
index e31249df1b0..5bc867dd036 100644
--- a/src/rustdoc/parse.rs
+++ b/src/rustdoc/parse.rs
@@ -1,11 +1,13 @@
 #[doc = "AST-parsing helpers"];
 
+import rustc::driver::driver;
+import rustc::driver::session;
 import rustc::driver::diagnostic;
 import rustc::syntax::ast;
 import rustc::syntax::codemap;
 import rustc::syntax::parse::parser;
 
-export from_file, from_str;
+export from_file, from_str, from_file_sess, from_str_sess;
 
 fn new_parse_sess() -> parser::parse_sess {
     let cm = codemap::new_codemap();
@@ -29,3 +31,16 @@ fn from_str(source: str) -> @ast::crate {
     parser::parse_crate_from_source_str(
         "-", @source, [], new_parse_sess())
 }
+
+fn from_file_sess(sess: session::session, file: str) -> @ast::crate {
+    parser::parse_crate_from_file(file, cfg(sess), sess.parse_sess)
+}
+
+fn from_str_sess(sess: session::session, source: str) -> @ast::crate {
+    parser::parse_crate_from_source_str(
+        "-", @source, cfg(sess), sess.parse_sess)
+}
+
+fn cfg(sess: session::session) -> ast::crate_cfg {
+    driver::default_configuration(sess, "rustdoc", "<anon>")
+}
\ No newline at end of file