rustdoc: Support #[doc(hidden)]

This commit is contained in:
Brian Anderson 2012-03-07 14:49:52 -08:00
parent 90ac69904f
commit 7f66df714a
4 changed files with 89 additions and 0 deletions

View File

@ -13,6 +13,7 @@ export crate_attrs, basic_attrs, fn_attrs, arg_attrs,
variant_attrs, res_attrs, method_attrs;
export parse_crate, parse_basic, parse_fn,
parse_variant, parse_res, parse_method;
export parse_hidden;
type crate_attrs = {
name: option<str>
@ -363,3 +364,28 @@ fn shoulde_parse_resource_arg() {
fn parse_method(attrs: [ast::attribute]) -> method_attrs {
parse_fn(attrs)
}
fn parse_hidden(attrs: [ast::attribute]) -> bool {
parse_short_doc_or(
attrs,
{|_desc| false },
{|metas, _brief, _desc|
let hiddens = attr::find_meta_items_by_name(metas, "hidden");
vec::is_not_empty(hiddens)
}
)
}
#[test]
fn shoulde_parse_hidden_attribute() {
let source = "#[doc(hidden)]";
let attrs = test::parse_attributes(source);
assert parse_hidden(attrs) == true;
}
#[test]
fn shoulde_not_parse_non_hidden_attribute() {
let source = "#[doc = \"\"]";
let attrs = test::parse_attributes(source);
assert parse_hidden(attrs) == false;
}

View File

@ -0,0 +1,61 @@
#[doc = "Prunes things with the #[doc(hidden)] attribute"];
export mk_pass;
fn mk_pass() -> pass {
{
name: "prune_hidden",
f: run
}
}
fn run(srv: astsrv::srv, doc: doc::doc) -> doc::doc {
let fold = fold::fold({
fold_mod: fold_mod
with *fold::default_any_fold(srv)
});
fold.fold_doc(fold, doc)
}
fn fold_mod(
fold: fold::fold<astsrv::srv>,
doc: doc::moddoc
) -> doc::moddoc {
let doc = fold::default_any_fold_mod(fold, doc);
{
items: vec::filter(doc.items) {|itemtag|
!is_hidden(fold.ctxt, itemtag.item())
}
with doc
}
}
fn is_hidden(srv: astsrv::srv, doc: doc::itemdoc) -> bool {
import rustc::middle::ast_map;
let id = doc.id;
astsrv::exec(srv) {|ctxt|
let attrs = alt ctxt.ast_map.get(id) {
ast_map::node_item(item, _) { item.attrs }
_ { [] }
};
attr_parser::parse_hidden(attrs)
}
}
#[test]
fn should_prune_hidden_items() {
let doc = test::mk_doc("#[doc(hidden)] mod a { }");
assert vec::is_empty(doc.cratemod().mods())
}
#[cfg(test)]
mod test {
fn mk_doc(source: str) -> doc::doc {
astsrv::from_str(source) {|srv|
let doc = extract::from_srv(srv, "");
run(srv, doc)
}
}
}

View File

@ -27,6 +27,7 @@ mod tystr_pass;
mod prune_undoc_details_pass;
mod prune_undoc_items_pass;
mod prune_unexported_pass;
mod prune_hidden_pass;
mod desc_to_brief_pass;
mod desc_pass;
mod unindent_pass;

View File

@ -146,6 +146,7 @@ fn run(config: config::config) {
prune_undoc_details_pass::mk_pass(),
// FIXME: This pass should be optional
// prune_undoc_items_pass::mk_pass(),
prune_hidden_pass::mk_pass(),
desc_to_brief_pass::mk_pass(),
trim_pass::mk_pass(),
unindent_pass::mk_pass(),