rustdoc: Support #[doc(hidden)]
This commit is contained in:
@@ -13,6 +13,7 @@ export crate_attrs, basic_attrs, fn_attrs, arg_attrs,
|
|||||||
variant_attrs, res_attrs, method_attrs;
|
variant_attrs, res_attrs, method_attrs;
|
||||||
export parse_crate, parse_basic, parse_fn,
|
export parse_crate, parse_basic, parse_fn,
|
||||||
parse_variant, parse_res, parse_method;
|
parse_variant, parse_res, parse_method;
|
||||||
|
export parse_hidden;
|
||||||
|
|
||||||
type crate_attrs = {
|
type crate_attrs = {
|
||||||
name: option<str>
|
name: option<str>
|
||||||
@@ -363,3 +364,28 @@ fn shoulde_parse_resource_arg() {
|
|||||||
fn parse_method(attrs: [ast::attribute]) -> method_attrs {
|
fn parse_method(attrs: [ast::attribute]) -> method_attrs {
|
||||||
parse_fn(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_details_pass;
|
||||||
mod prune_undoc_items_pass;
|
mod prune_undoc_items_pass;
|
||||||
mod prune_unexported_pass;
|
mod prune_unexported_pass;
|
||||||
|
mod prune_hidden_pass;
|
||||||
mod desc_to_brief_pass;
|
mod desc_to_brief_pass;
|
||||||
mod desc_pass;
|
mod desc_pass;
|
||||||
mod unindent_pass;
|
mod unindent_pass;
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ fn run(config: config::config) {
|
|||||||
prune_undoc_details_pass::mk_pass(),
|
prune_undoc_details_pass::mk_pass(),
|
||||||
// FIXME: This pass should be optional
|
// FIXME: This pass should be optional
|
||||||
// prune_undoc_items_pass::mk_pass(),
|
// prune_undoc_items_pass::mk_pass(),
|
||||||
|
prune_hidden_pass::mk_pass(),
|
||||||
desc_to_brief_pass::mk_pass(),
|
desc_to_brief_pass::mk_pass(),
|
||||||
trim_pass::mk_pass(),
|
trim_pass::mk_pass(),
|
||||||
unindent_pass::mk_pass(),
|
unindent_pass::mk_pass(),
|
||||||
|
|||||||
Reference in New Issue
Block a user