Skip to content

Commit

Permalink
rustdoc: Prune unexported enums and variants
Browse files Browse the repository at this point in the history
  • Loading branch information
brson committed Jan 27, 2012
1 parent 28fbb19 commit a06850c
Showing 1 changed file with 92 additions and 1 deletion.
93 changes: 92 additions & 1 deletion src/rustdoc/prune_unexported_pass.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,8 @@ fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
~{
mods: doc::modlist(exported_mods(fold.ctxt, doc)),
fns: doc::fnlist(exported_fns(fold.ctxt, doc)),
consts: doc::constlist(exported_consts(fold.ctxt, doc))
consts: doc::constlist(exported_consts(fold.ctxt, doc)),
enums: doc::enumlist(exported_enums(fold.ctxt, doc))
with *doc
}
}
Expand Down Expand Up @@ -52,6 +53,14 @@ fn exported_consts(srv: astsrv::srv, doc: doc::moddoc) -> [doc::constdoc] {
)
}

fn exported_enums(srv: astsrv::srv, doc: doc::moddoc) -> [doc::enumdoc] {
exported_things(
srv, doc,
exported_enums_from_crate,
exported_enums_from_mod
)
}

fn exported_things<T>(
srv: astsrv::srv,
doc: doc::moddoc,
Expand Down Expand Up @@ -107,6 +116,20 @@ fn exported_consts_from_mod(
exported_consts_from(srv, doc, bind is_exported_from_mod(_, doc.id, _))
}

fn exported_enums_from_crate(
srv: astsrv::srv,
doc: doc::moddoc
) -> [doc::enumdoc] {
exported_enums_from(srv, doc, is_exported_from_crate)
}

fn exported_enums_from_mod(
srv: astsrv::srv,
doc: doc::moddoc
) -> [doc::enumdoc] {
exported_enums_from(srv, doc, bind is_exported_from_mod(_, doc.id, _))
}

fn exported_fns_from(
srv: astsrv::srv,
doc: doc::moddoc,
Expand Down Expand Up @@ -149,6 +172,38 @@ fn exported_consts_from(
}
}

fn exported_enums_from(
srv: astsrv::srv,
doc: doc::moddoc,
is_exported: fn(astsrv::srv, str) -> bool
) -> [doc::enumdoc] {
vec::filter_map(*doc.enums) { |doc|
if is_exported(srv, doc.name) {
some(~{
variants: exported_variants_from(
srv, doc, is_exported)
with *doc
})
} else {
none
}
}
}

fn exported_variants_from(
srv: astsrv::srv,
doc: doc::enumdoc,
is_exported: fn(astsrv::srv, str) -> bool
) -> [doc::variantdoc] {
vec::filter_map(doc.variants) { |doc|
if is_exported(srv, doc.name) {
some(doc)
} else {
none
}
}
}

fn is_exported_from_mod(
srv: astsrv::srv,
mod_id: doc::ast_id,
Expand Down Expand Up @@ -231,3 +286,39 @@ fn should_prune_unexported_consts_from_top_mod() {
let doc = run(srv, doc);
assert vec::len(*doc.topmod.consts) == 1u;
}

#[test]
fn should_prune_unexported_enums_from_top_mod() {
let source = "export a; mod a { } enum b { c }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = run(srv, doc);
assert vec::len(*doc.topmod.enums) == 0u;
}

#[test]
fn should_prune_unexported_enums() {
let source = "mod a { export a; mod a { } enum b { c } }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = run(srv, doc);
assert vec::len(*doc.topmod.mods[0].enums) == 0u;
}

#[test]
fn should_prune_unexported_variants_from_top_mod() {
let source = "export b::{}; enum b { c }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = run(srv, doc);
assert vec::len(doc.topmod.enums[0].variants) == 0u;
}

#[test]
fn should_prune_unexported_variants() {
let source = "mod a { export b::{}; enum b { c } }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = run(srv, doc);
assert vec::len(doc.topmod.mods[0].enums[0].variants) == 0u;
}

0 comments on commit a06850c

Please sign in to comment.