@@ -15,28 +15,29 @@ fn run(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
15
15
mutable path: [ ]
16
16
} ;
17
17
let fold = fold:: fold ( {
18
- fold_mod : fn ~(
19
- f: fold:: fold<ctxt>,
20
- d: doc:: moddoc
21
- ) -> doc:: moddoc {
22
- fold_mod( f, d)
23
- }
18
+ fold_item: fold_item,
19
+ fold_mod: fold_mod
24
20
with * fold:: default_seq_fold ( ctxt)
25
21
} ) ;
26
22
fold. fold_crate ( fold, doc)
27
23
}
28
24
25
+ fn fold_item ( fold : fold:: fold < ctxt > , doc : doc:: itemdoc ) -> doc:: itemdoc {
26
+ {
27
+ path: fold. ctxt . path
28
+ with doc
29
+ }
30
+ }
31
+
29
32
fn fold_mod ( fold : fold:: fold < ctxt > , doc : doc:: moddoc ) -> doc:: moddoc {
30
33
let is_topmod = doc. id ( ) == rustc:: syntax:: ast:: crate_node_id;
31
34
32
35
if !is_topmod { vec:: push ( fold. ctxt . path , doc. name ( ) ) ; }
33
36
let doc = fold:: default_seq_fold_mod ( fold, doc) ;
34
37
if !is_topmod { vec:: pop ( fold. ctxt . path ) ; }
38
+
35
39
{
36
- item : {
37
- path : fold. ctxt . path
38
- with doc. item
39
- }
40
+ item: fold. fold_item ( fold, doc. item )
40
41
with doc
41
42
}
42
43
}
@@ -47,6 +48,16 @@ fn should_record_mod_paths() {
47
48
let srv = astsrv:: mk_srv_from_str ( source) ;
48
49
let doc = extract:: from_srv ( srv, "" ) ;
49
50
let doc = run ( srv, doc) ;
51
+ log ( error, doc. topmod . mods ( ) [ 0 ] . mods ( ) [ 0 ] . mods ( ) [ 0 ] . path ( ) ) ;
50
52
assert doc. topmod . mods ( ) [ 0 ] . mods ( ) [ 0 ] . mods ( ) [ 0 ] . path ( ) == [ "a" , "b" ] ;
51
53
assert doc. topmod . mods ( ) [ 0 ] . mods ( ) [ 1 ] . mods ( ) [ 0 ] . path ( ) == [ "a" , "d" ] ;
54
+ }
55
+
56
+ #[ test]
57
+ fn should_record_fn_paths ( ) {
58
+ let source = "mod a { fn b() { } }" ;
59
+ let srv = astsrv:: mk_srv_from_str ( source) ;
60
+ let doc = extract:: from_srv ( srv, "" ) ;
61
+ let doc = run ( srv, doc) ;
62
+ assert doc. topmod . mods ( ) [ 0 ] . fns ( ) [ 0 ] . path ( ) == [ "a" ] ;
52
63
}
0 commit comments