@@ -23,7 +23,8 @@ fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
23
23
~{
24
24
mods: doc:: modlist ( exported_mods ( fold. ctxt , doc) ) ,
25
25
fns: doc:: fnlist ( exported_fns ( fold. ctxt , doc) ) ,
26
- consts: doc:: constlist ( exported_consts ( fold. ctxt , doc) )
26
+ consts: doc:: constlist ( exported_consts ( fold. ctxt , doc) ) ,
27
+ enums: doc:: enumlist ( exported_enums ( fold. ctxt , doc) )
27
28
with * doc
28
29
}
29
30
}
@@ -52,6 +53,14 @@ fn exported_consts(srv: astsrv::srv, doc: doc::moddoc) -> [doc::constdoc] {
52
53
)
53
54
}
54
55
56
+ fn exported_enums ( srv : astsrv:: srv , doc : doc:: moddoc ) -> [ doc:: enumdoc ] {
57
+ exported_things (
58
+ srv, doc,
59
+ exported_enums_from_crate,
60
+ exported_enums_from_mod
61
+ )
62
+ }
63
+
55
64
fn exported_things < T > (
56
65
srv : astsrv:: srv ,
57
66
doc : doc:: moddoc ,
@@ -107,6 +116,20 @@ fn exported_consts_from_mod(
107
116
exported_consts_from ( srv, doc, bind is_exported_from_mod ( _, doc. id , _) )
108
117
}
109
118
119
+ fn exported_enums_from_crate (
120
+ srv : astsrv:: srv ,
121
+ doc : doc:: moddoc
122
+ ) -> [ doc:: enumdoc ] {
123
+ exported_enums_from ( srv, doc, is_exported_from_crate)
124
+ }
125
+
126
+ fn exported_enums_from_mod (
127
+ srv : astsrv:: srv ,
128
+ doc : doc:: moddoc
129
+ ) -> [ doc:: enumdoc ] {
130
+ exported_enums_from ( srv, doc, bind is_exported_from_mod ( _, doc. id , _) )
131
+ }
132
+
110
133
fn exported_fns_from (
111
134
srv : astsrv:: srv ,
112
135
doc : doc:: moddoc ,
@@ -149,6 +172,38 @@ fn exported_consts_from(
149
172
}
150
173
}
151
174
175
+ fn exported_enums_from (
176
+ srv : astsrv:: srv ,
177
+ doc : doc:: moddoc ,
178
+ is_exported : fn ( astsrv:: srv , str ) -> bool
179
+ ) -> [ doc:: enumdoc ] {
180
+ vec:: filter_map ( * doc. enums ) { |doc|
181
+ if is_exported ( srv, doc. name ) {
182
+ some ( ~{
183
+ variants: exported_variants_from (
184
+ srv, doc, is_exported)
185
+ with * doc
186
+ } )
187
+ } else {
188
+ none
189
+ }
190
+ }
191
+ }
192
+
193
+ fn exported_variants_from (
194
+ srv : astsrv:: srv ,
195
+ doc : doc:: enumdoc ,
196
+ is_exported : fn ( astsrv:: srv , str ) -> bool
197
+ ) -> [ doc:: variantdoc ] {
198
+ vec:: filter_map ( doc. variants ) { |doc|
199
+ if is_exported ( srv, doc. name ) {
200
+ some ( doc)
201
+ } else {
202
+ none
203
+ }
204
+ }
205
+ }
206
+
152
207
fn is_exported_from_mod (
153
208
srv : astsrv:: srv ,
154
209
mod_id : doc:: ast_id ,
@@ -231,3 +286,39 @@ fn should_prune_unexported_consts_from_top_mod() {
231
286
let doc = run ( srv, doc) ;
232
287
assert vec:: len ( * doc. topmod . consts ) == 1 u;
233
288
}
289
+
290
+ #[ test]
291
+ fn should_prune_unexported_enums_from_top_mod ( ) {
292
+ let source = "export a; mod a { } enum b { c }" ;
293
+ let srv = astsrv:: mk_srv_from_str ( source) ;
294
+ let doc = extract:: from_srv ( srv, "" ) ;
295
+ let doc = run ( srv, doc) ;
296
+ assert vec:: len ( * doc. topmod . enums ) == 0 u;
297
+ }
298
+
299
+ #[ test]
300
+ fn should_prune_unexported_enums ( ) {
301
+ let source = "mod a { export a; mod a { } enum b { c } }" ;
302
+ let srv = astsrv:: mk_srv_from_str ( source) ;
303
+ let doc = extract:: from_srv ( srv, "" ) ;
304
+ let doc = run ( srv, doc) ;
305
+ assert vec:: len ( * doc. topmod . mods [ 0 ] . enums ) == 0 u;
306
+ }
307
+
308
+ #[ test]
309
+ fn should_prune_unexported_variants_from_top_mod ( ) {
310
+ let source = "export b::{}; enum b { c }" ;
311
+ let srv = astsrv:: mk_srv_from_str ( source) ;
312
+ let doc = extract:: from_srv ( srv, "" ) ;
313
+ let doc = run ( srv, doc) ;
314
+ assert vec:: len ( doc. topmod . enums [ 0 ] . variants ) == 0 u;
315
+ }
316
+
317
+ #[ test]
318
+ fn should_prune_unexported_variants ( ) {
319
+ let source = "mod a { export b::{}; enum b { c } }" ;
320
+ let srv = astsrv:: mk_srv_from_str ( source) ;
321
+ let doc = extract:: from_srv ( srv, "" ) ;
322
+ let doc = run ( srv, doc) ;
323
+ assert vec:: len ( doc. topmod . mods [ 0 ] . enums [ 0 ] . variants ) == 0 u;
324
+ }
0 commit comments