1
1
import rustc:: syntax:: ast;
2
+ import rustc:: syntax:: print:: pprust;
3
+ import rustc:: middle:: ast_map;
4
+ import astsrv:: seq_srv;
2
5
3
6
export run;
4
7
5
8
fn run (
6
- doc : doc :: cratedoc ,
7
- crate : @ast :: crate
9
+ srv : astsrv :: seq_srv ,
10
+ doc : doc :: cratedoc
8
11
) -> doc:: cratedoc {
9
12
let fold = fold:: fold ( {
10
13
fold_fn : fn ~(
11
- f: fold:: fold<@ast :: crate >,
14
+ f: fold:: fold<astsrv :: seq_srv >,
12
15
d: doc:: fndoc
13
16
) -> doc:: fndoc {
14
17
fold_fn( f, d)
15
18
}
16
- with * fold:: default_seq_fold ( crate )
19
+ with * fold:: default_seq_fold ( srv )
17
20
} ) ;
18
21
fold. fold_crate ( fold, doc)
19
22
}
20
23
21
24
fn fold_fn (
22
- fold: fold:: fold<@ast :: crate >,
25
+ fold : fold:: fold < astsrv :: seq_srv > ,
23
26
doc : doc:: fndoc
24
27
) -> doc:: fndoc {
25
- import rustc:: middle:: ast_map;
26
- import rustc:: syntax:: print:: pprust;
27
28
28
- let crate = fold. ctxt ;
29
-
30
- let map = ast_map:: map_crate ( * crate ) ;
29
+ let srv = fold. ctxt ;
31
30
32
31
fn add_ret_ty (
33
32
doc : option < doc:: retdoc > ,
@@ -46,14 +45,18 @@ fn fold_fn(
46
45
}
47
46
}
48
47
49
- ~ {
50
- return : alt map. get ( doc. id ) {
48
+ let retty = srv . exec { |ctxt|
49
+ alt ctxt . map . get ( doc. id ) {
51
50
ast_map:: node_item ( @{
52
51
node: ast:: item_fn ( decl, _, _) , _
53
52
} ) {
54
- add_ret_ty ( doc . return , pprust:: ty_to_str ( decl. output ) )
53
+ pprust:: ty_to_str ( decl. output )
55
54
}
56
55
}
56
+ } ;
57
+
58
+ ~{
59
+ return : add_ret_ty ( doc. return , retty)
57
60
with * doc
58
61
}
59
62
}
@@ -64,9 +67,9 @@ mod tests {
64
67
#[ test]
65
68
fn should_add_fn_ret_types ( ) {
66
69
let source = "fn a() -> int { }" ;
67
- let ast = parse :: from_str ( source) ;
68
- let doc = extract:: extract ( ast , "" ) ;
69
- let doc = run ( doc , ast ) ;
70
+ let srv = astsrv :: mk_seq_srv_from_str ( source) ;
71
+ let doc = extract:: from_srv ( srv , "" ) ;
72
+ let doc = run ( srv , doc ) ;
70
73
assert option:: get ( doc. topmod . fns [ 0 ] . return ) . ty == some ( "int" ) ;
71
74
}
72
75
}
0 commit comments