diff --git a/src/rustdoc/astsrv.rs b/src/rustdoc/astsrv.rs index ec371a093b3a..d589cba107be 100644 --- a/src/rustdoc/astsrv.rs +++ b/src/rustdoc/astsrv.rs @@ -5,9 +5,10 @@ import rustc::middle::ast_map; export ctxt; export ctxt_handler; -export srv, seq_srv; -export mk_seq_srv_from_str; -export mk_seq_srv_from_file; +export srv; +export mk_srv_from_str; +export mk_srv_from_file; +export exec; type ctxt = { ast: @ast::crate, @@ -16,25 +17,20 @@ type ctxt = { type ctxt_handler = fn~(ctxt: ctxt) -> T; -iface srv { - fn exec(f: ctxt_handler) -> T; -} +type srv = { + ctxt: ctxt +}; -#[doc = "The single-task service"] -tag seq_srv = ctxt; - -impl seq_srv of srv for seq_srv { - fn exec(f: ctxt_handler) -> T { - f(*self) +fn mk_srv_from_str(source: str) -> srv { + { + ctxt: build_ctxt(parse::from_str(source)) } } -fn mk_seq_srv_from_str(source: str) -> seq_srv { - seq_srv(build_ctxt(parse::from_str(source))) -} - -fn mk_seq_srv_from_file(file: str) -> seq_srv { - seq_srv(build_ctxt(parse::from_file(file))) +fn mk_srv_from_file(file: str) -> srv { + { + ctxt: build_ctxt(parse::from_file(file)) + } } fn build_ctxt(ast: @ast::crate) -> ctxt { @@ -44,23 +40,30 @@ fn build_ctxt(ast: @ast::crate) -> ctxt { } } +fn exec( + srv: srv, + f: fn~(ctxt: ctxt) -> T +) -> T { + f(srv.ctxt) +} + #[cfg(test)] mod tests { #[test] - fn seq_srv_should_build_ast_map() { + fn srv_should_build_ast_map() { let source = "fn a() { }"; - let srv = mk_seq_srv_from_str(source); - srv.exec {|ctxt| + let srv = mk_srv_from_str(source); + exec(srv) {|ctxt| assert ctxt.map.size() != 0u }; } #[test] - fn seq_srv_should_return_request_result() { + fn srv_should_return_request_result() { let source = "fn a() { }"; - let srv = mk_seq_srv_from_str(source); - let result = srv.exec {|_ctxt| 1000}; + let srv = mk_srv_from_str(source); + let result = exec(srv) {|_ctxt| 1000}; assert result == 1000; } } \ No newline at end of file diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index c5fcd6c0af74..96cca34ea12c 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -4,12 +4,12 @@ import rustc::middle::ast_map; export run; fn run( - srv: astsrv::seq_srv, + srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { let fold = fold::fold({ fold_fn: fn~( - f: fold::fold, + f: fold::fold, d: doc::fndoc ) -> doc::fndoc { fold_fn(f, d) @@ -20,16 +20,18 @@ fn run( } fn fold_fn( - fold: fold::fold, + fold: fold::fold, doc: doc::fndoc ) -> doc::fndoc { let srv = fold.ctxt; - let attrs = alt srv.map.get(doc.id) { - ast_map::node_item(item) { item.attrs } + let attrs = astsrv::exec(srv) {|ctxt| + let attrs = alt ctxt.map.get(doc.id) { + ast_map::node_item(item) { item.attrs } + }; + attr_parser::parse_fn(attrs) }; - let attrs = attr_parser::parse_fn(attrs); ret merge_fn_attrs(doc, attrs); fn merge_fn_attrs( @@ -66,7 +68,7 @@ fn fold_fn( #[test] fn fold_fn_should_extract_fn_attributes() { let source = "#[doc = \"test\"] fn a() -> int { }"; - let srv = astsrv::mk_seq_srv_from_str(source); + let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let fold = fold::default_seq_fold(srv); let doc = fold_fn(fold, doc.topmod.fns[0]); diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index 05d381d0f7dd..066ef8817eff 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -4,11 +4,10 @@ export from_srv, extract; // FIXME: Want this to be from_srv but it crashes fn from_srv( - srv: astsrv::seq_srv, + srv: astsrv::srv, default_name: str ) -> doc::cratedoc { - import astsrv::seq_srv; - srv.exec {|ctxt| + astsrv::exec(srv) {|ctxt| extract(ctxt.ast, default_name) } } @@ -137,9 +136,8 @@ mod tests { #[test] fn extract_from_seq_srv() { - import astsrv::seq_srv; let source = ""; - let srv = astsrv::mk_seq_srv_from_str(source); + let srv = astsrv::mk_srv_from_str(source); let doc = from_srv(srv, "name"); assert doc.topmod.name == "name"; } diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs index 1c1809effec5..af9ab9708231 100644 --- a/src/rustdoc/prune_undoc_pass.rs +++ b/src/rustdoc/prune_undoc_pass.rs @@ -5,7 +5,7 @@ type ctxt = { }; fn run( - _srv: astsrv::seq_srv, + _srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { let ctxt = { @@ -59,7 +59,7 @@ mod tests { #[test] fn should_elide_undocumented_fns() { let source = "fn a() { }"; - let srv = astsrv::mk_seq_srv_from_str(source); + let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let doc = run(srv, doc); assert vec::is_empty(*doc.topmod.fns); diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs index cb951069e9a8..c89a221f0f75 100755 --- a/src/rustdoc/rustdoc.rs +++ b/src/rustdoc/rustdoc.rs @@ -5,10 +5,10 @@ use std; use rustc; -type pass = fn~(srv: astsrv::seq_srv, doc: doc::cratedoc) -> doc::cratedoc; +type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc; fn run_passes( - srv: astsrv::seq_srv, + srv: astsrv::srv, doc: doc::cratedoc, passes: [pass] ) -> doc::cratedoc { @@ -19,9 +19,8 @@ fn run_passes( #[test] fn test_run_passes() { - import astsrv::seq_srv; fn pass1( - _srv: astsrv::seq_srv, + _srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { ~{ @@ -33,7 +32,7 @@ fn test_run_passes() { } } fn pass2( - _srv: astsrv::seq_srv, + _srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { ~{ @@ -45,7 +44,7 @@ fn test_run_passes() { } } let source = ""; - let srv = astsrv::mk_seq_srv_from_str(source); + let srv = astsrv::mk_srv_from_str(source); let passes = [pass1, pass2]; let doc = extract::from_srv(srv, "one"); let doc = run_passes(srv, doc, passes); @@ -73,7 +72,7 @@ fn main(argv: [str]) { fn run(source_file: str) { let default_name = source_file; - let srv = astsrv::mk_seq_srv_from_file(source_file); + let srv = astsrv::mk_srv_from_file(source_file); let doc = extract::from_srv(srv, default_name); let doc = run_passes(srv, doc, [ attr_pass::run, diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs index 7af075f5183f..4a06aec5b247 100644 --- a/src/rustdoc/tystr_pass.rs +++ b/src/rustdoc/tystr_pass.rs @@ -1,17 +1,16 @@ import rustc::syntax::ast; import rustc::syntax::print::pprust; import rustc::middle::ast_map; -import astsrv::seq_srv; export run; fn run( - srv: astsrv::seq_srv, + srv: astsrv::srv, doc: doc::cratedoc ) -> doc::cratedoc { let fold = fold::fold({ fold_fn: fn~( - f: fold::fold, + f: fold::fold, d: doc::fndoc ) -> doc::fndoc { fold_fn(f, d) @@ -22,7 +21,7 @@ fn run( } fn fold_fn( - fold: fold::fold, + fold: fold::fold, doc: doc::fndoc ) -> doc::fndoc { @@ -45,7 +44,7 @@ fn fold_fn( } } - let retty = srv.exec {|ctxt| + let retty = astsrv::exec(srv) {|ctxt| alt ctxt.map.get(doc.id) { ast_map::node_item(@{ node: ast::item_fn(decl, _, _), _ @@ -67,7 +66,7 @@ mod tests { #[test] fn should_add_fn_ret_types() { let source = "fn a() -> int { }"; - let srv = astsrv::mk_seq_srv_from_str(source); + let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let doc = run(srv, doc); assert option::get(doc.topmod.fns[0].return).ty == some("int");