rustdoc: Support #[doc(hidden)]
This commit is contained in:
parent
90ac69904f
commit
7f66df714a
@ -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;
|
||||
}
|
||||
|
61
src/rustdoc/prune_hidden_pass.rs
Normal file
61
src/rustdoc/prune_hidden_pass.rs
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
@ -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(),
|
||||
|
Loading…
x
Reference in New Issue
Block a user