Skip to content

Commit d66ac39

Browse files
committed
rustdoc: Prune unexported consts
1 parent ab86bad commit d66ac39

File tree

1 file changed

+64
-7
lines changed

1 file changed

+64
-7
lines changed

src/rustdoc/prune_unexported_pass.rs

Lines changed: 64 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
2222
let doc = fold::default_seq_fold_mod(fold, doc);
2323
~{
2424
mods: doc::modlist(exported_mods(fold.ctxt, doc)),
25-
fns: doc::fnlist(exported_fns(fold.ctxt, doc))
25+
fns: doc::fnlist(exported_fns(fold.ctxt, doc)),
26+
consts: doc::constlist(exported_consts(fold.ctxt, doc))
2627
with *doc
2728
}
2829
}
@@ -43,6 +44,14 @@ fn exported_fns(srv: astsrv::srv, doc: doc::moddoc) -> [doc::fndoc] {
4344
)
4445
}
4546

47+
fn exported_consts(srv: astsrv::srv, doc: doc::moddoc) -> [doc::constdoc] {
48+
exported_things(
49+
srv, doc,
50+
exported_consts_from_crate,
51+
exported_consts_from_mod
52+
)
53+
}
54+
4655
fn exported_things<T>(
4756
srv: astsrv::srv,
4857
doc: doc::moddoc,
@@ -84,6 +93,20 @@ fn exported_fns_from_mod(
8493
exported_fns_from(srv, doc, bind is_exported_from_mod(_, doc.id, _))
8594
}
8695

96+
fn exported_consts_from_crate(
97+
srv: astsrv::srv,
98+
doc: doc::moddoc
99+
) -> [doc::constdoc] {
100+
exported_consts_from(srv, doc, is_exported_from_crate)
101+
}
102+
103+
fn exported_consts_from_mod(
104+
srv: astsrv::srv,
105+
doc: doc::moddoc
106+
) -> [doc::constdoc] {
107+
exported_consts_from(srv, doc, bind is_exported_from_mod(_, doc.id, _))
108+
}
109+
87110
fn exported_fns_from(
88111
srv: astsrv::srv,
89112
doc: doc::moddoc,
@@ -112,6 +135,20 @@ fn exported_mods_from(
112135
}
113136
}
114137

138+
fn exported_consts_from(
139+
srv: astsrv::srv,
140+
doc: doc::moddoc,
141+
is_exported: fn(astsrv::srv, str) -> bool
142+
) -> [doc::constdoc] {
143+
vec::filter_map(*doc.consts) { |doc|
144+
if is_exported(srv, doc.name) {
145+
some(doc)
146+
} else {
147+
none
148+
}
149+
}
150+
}
151+
115152
fn is_exported_from_mod(
116153
srv: astsrv::srv,
117154
mod_id: doc::ast_id,
@@ -149,21 +186,21 @@ fn should_prune_unexported_fns() {
149186
}
150187

151188
#[test]
152-
fn should_prune_unexported_modules() {
153-
let source = "mod a { export a; mod a { } mod b { } }";
189+
fn should_prune_unexported_fns_from_top_mod() {
190+
let source = "export a; fn a() { } fn b() { }";
154191
let srv = astsrv::mk_srv_from_str(source);
155192
let doc = extract::from_srv(srv, "");
156193
let doc = run(srv, doc);
157-
assert vec::len(*doc.topmod.mods[0].mods) == 1u;
194+
assert vec::len(*doc.topmod.fns) == 1u;
158195
}
159196

160197
#[test]
161-
fn should_prune_unexported_fns_from_top_mod() {
162-
let source = "export a; fn a() { } fn b() { }";
198+
fn should_prune_unexported_modules() {
199+
let source = "mod a { export a; mod a { } mod b { } }";
163200
let srv = astsrv::mk_srv_from_str(source);
164201
let doc = extract::from_srv(srv, "");
165202
let doc = run(srv, doc);
166-
assert vec::len(*doc.topmod.fns) == 1u;
203+
assert vec::len(*doc.topmod.mods[0].mods) == 1u;
167204
}
168205

169206
#[test]
@@ -174,3 +211,23 @@ fn should_prune_unexported_modules_from_top_mod() {
174211
let doc = run(srv, doc);
175212
assert vec::len(*doc.topmod.mods) == 1u;
176213
}
214+
215+
#[test]
216+
fn should_prune_unexported_consts() {
217+
let source = "mod a { export a; \
218+
const a: bool = true; \
219+
const b: bool = true; }";
220+
let srv = astsrv::mk_srv_from_str(source);
221+
let doc = extract::from_srv(srv, "");
222+
let doc = run(srv, doc);
223+
assert vec::len(*doc.topmod.mods[0].consts) == 1u;
224+
}
225+
226+
#[test]
227+
fn should_prune_unexported_consts_from_top_mod() {
228+
let source = "export a; const a: bool = true; const b: bool = true;";
229+
let srv = astsrv::mk_srv_from_str(source);
230+
let doc = extract::from_srv(srv, "");
231+
let doc = run(srv, doc);
232+
assert vec::len(*doc.topmod.consts) == 1u;
233+
}

0 commit comments

Comments
 (0)