diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-01-26 00:35:07 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-01-26 11:36:29 -0800 |
| commit | 91ee6afeaedd5ec73b0af90b4673e53d1becb8a7 (patch) | |
| tree | bfbf05c91f800c4111c6cdc630db3ef3b36b76fe /src | |
| parent | 38908581f7d34066ece145bcedcbe8bbddee9bcc (diff) | |
| download | rust-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.rs | 112 | ||||
| -rw-r--r-- | src/rustdoc/parse.rs | 17 |
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 |
