Skip to content

Commit 77b02f7

Browse files
committed
---
yaml --- r: 7839 b: refs/heads/snap-stage3 c: 91ee6af h: refs/heads/master i: 7837: c42d072 7835: c045319 7831: ae1e61a 7823: e95cd64 7807: 77262e1 v: v3
1 parent 402d7ba commit 77b02f7

File tree

3 files changed

+105
-26
lines changed

3 files changed

+105
-26
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
refs/heads/master: 2898dcc5d97da9427ac367542382b6239d9c0bbf
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: 38908581f7d34066ece145bcedcbe8bbddee9bcc
4+
refs/heads/snap-stage3: 91ee6afeaedd5ec73b0af90b4673e53d1becb8a7
55
refs/heads/try: 2898dcc5d97da9427ac367542382b6239d9c0bbf
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/snap-stage3/src/rustdoc/astsrv.rs

Lines changed: 88 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,14 @@
77
Rustdoc from its non-sendableness."
88
)];
99

10+
import rustc::driver::session;
11+
import rustc::driver::driver;
12+
import rustc::driver::diagnostic;
1013
import rustc::syntax::ast;
1114
import rustc::middle::ast_map;
15+
import rustc::back::link;
16+
import rustc::util::filesearch;
17+
import rustc::front;
1218

1319
export ctxt;
1420
export ctxt_handler;
@@ -29,29 +35,62 @@ type srv = {
2935
};
3036

3137
fn mk_srv_from_str(source: str) -> srv {
38+
let sess = build_session();
3239
{
33-
ctxt: build_ctxt(parse::from_str(source))
40+
ctxt: build_ctxt(sess, parse::from_str_sess(sess, source))
3441
}
3542
}
3643

3744
fn mk_srv_from_file(file: str) -> srv {
45+
let sess = build_session();
3846
{
39-
ctxt: build_ctxt(parse::from_file(file))
47+
ctxt: build_ctxt(sess, parse::from_file_sess(sess, file))
4048
}
4149
}
4250

43-
fn build_ctxt(ast: @ast::crate) -> ctxt {
51+
fn build_ctxt(sess: session::session, ast: @ast::crate) -> ctxt {
4452

4553
import rustc::front::config;
4654

4755
let ast = config::strip_unconfigured_items(ast);
56+
let ast = front::test::modify_for_testing(sess, ast);
57+
let ast_map = ast_map::map_crate(*ast);
4858

4959
{
5060
ast: ast,
51-
ast_map: ast_map::map_crate(*ast)
61+
ast_map: ast_map,
5262
}
5363
}
5464

65+
fn build_session() -> session::session {
66+
let sopts: @session::options = @{
67+
crate_type: session::lib_crate,
68+
static: false,
69+
libcore: false,
70+
optimize: 0u,
71+
debuginfo: false,
72+
extra_debuginfo: false,
73+
verify: false,
74+
lint_opts: [],
75+
save_temps: false,
76+
stats: false,
77+
time_passes: false,
78+
time_llvm_passes: false,
79+
output_type: link::output_type_exe,
80+
addl_lib_search_paths: [],
81+
maybe_sysroot: none,
82+
target_triple: driver::host_triple(),
83+
cfg: [],
84+
test: false,
85+
parse_only: false,
86+
no_trans: false,
87+
do_gc: false,
88+
no_asm_comments: false,
89+
warn_unused_imports: false
90+
};
91+
driver::build_session(sopts, ".", diagnostic::emit)
92+
}
93+
5594
#[test]
5695
fn should_prune_unconfigured_items() {
5796
let source = "#[cfg(shut_up_and_leave_me_alone)]fn a() { }";
@@ -61,30 +100,55 @@ fn should_prune_unconfigured_items() {
61100
}
62101
}
63102

103+
#[test]
104+
#[ignore]
105+
fn srv_should_build_ast_map() {
106+
// FIXME
107+
/*let source = "fn a() { }";
108+
let srv = mk_srv_from_str(source);
109+
exec(srv) {|ctxt|
110+
assert ctxt.ast_map.size() != 0u
111+
};*/
112+
}
113+
114+
#[test]
115+
#[ignore]
116+
fn srv_should_build_reexport_map() {
117+
// FIXME
118+
/*let source = "import a::b; export b; mod a { mod b { } }";
119+
let srv = mk_srv_from_str(source);
120+
exec(srv) {|ctxt|
121+
assert ctxt.exp_map.size() != 0u
122+
};*/
123+
}
124+
125+
#[test]
126+
fn srv_should_resolve_external_crates() {
127+
let source = "use std;\
128+
fn f() -> std::sha1::sha1 {\
129+
std::sha1::mk_sha1() }";
130+
// Just testing that resolve doesn't crash
131+
mk_srv_from_str(source);
132+
}
133+
134+
#[test]
135+
fn srv_should_resolve_core_crate() {
136+
let source = "fn a() -> option { fail }";
137+
// Just testing that resolve doesn't crash
138+
mk_srv_from_str(source);
139+
}
140+
64141
fn exec<T>(
65142
srv: srv,
66143
f: fn~(ctxt: ctxt) -> T
67144
) -> T {
68145
f(srv.ctxt)
69146
}
70147

71-
#[cfg(test)]
72-
mod tests {
73-
74-
#[test]
75-
fn srv_should_build_ast_map() {
76-
let source = "fn a() { }";
77-
let srv = mk_srv_from_str(source);
78-
exec(srv) {|ctxt|
79-
assert ctxt.ast_map.size() != 0u
80-
};
81-
}
82-
83-
#[test]
84-
fn srv_should_return_request_result() {
85-
let source = "fn a() { }";
86-
let srv = mk_srv_from_str(source);
87-
let result = exec(srv) {|_ctxt| 1000};
88-
assert result == 1000;
89-
}
90-
}
148+
#[test]
149+
fn srv_should_return_request_result() {
150+
let source = "fn a() { }";
151+
let srv = mk_srv_from_str(source);
152+
let result = exec(srv) {|_ctxt| 1000};
153+
assert result == 1000;
154+
}

branches/snap-stage3/src/rustdoc/parse.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
#[doc = "AST-parsing helpers"];
22

3+
import rustc::driver::driver;
4+
import rustc::driver::session;
35
import rustc::driver::diagnostic;
46
import rustc::syntax::ast;
57
import rustc::syntax::codemap;
68
import rustc::syntax::parse::parser;
79

8-
export from_file, from_str;
10+
export from_file, from_str, from_file_sess, from_str_sess;
911

1012
fn new_parse_sess() -> parser::parse_sess {
1113
let cm = codemap::new_codemap();
@@ -29,3 +31,16 @@ fn from_str(source: str) -> @ast::crate {
2931
parser::parse_crate_from_source_str(
3032
"-", @source, [], new_parse_sess())
3133
}
34+
35+
fn from_file_sess(sess: session::session, file: str) -> @ast::crate {
36+
parser::parse_crate_from_file(file, cfg(sess), sess.parse_sess)
37+
}
38+
39+
fn from_str_sess(sess: session::session, source: str) -> @ast::crate {
40+
parser::parse_crate_from_source_str(
41+
"-", @source, cfg(sess), sess.parse_sess)
42+
}
43+
44+
fn cfg(sess: session::session) -> ast::crate_cfg {
45+
driver::default_configuration(sess, "rustdoc", "<anon>")
46+
}

0 commit comments

Comments
 (0)