rustdoc: Get the crate brief description from the 'desc' attr
This commit is contained in:
parent
7857dcb88c
commit
521e58a3c4
@ -13,7 +13,8 @@ export crate_attrs, mod_attrs, fn_attrs, arg_attrs;
|
||||
export parse_crate, parse_mod, parse_fn;
|
||||
|
||||
type crate_attrs = {
|
||||
name: option<str>
|
||||
name: option<str>,
|
||||
desc: option<str>
|
||||
};
|
||||
|
||||
type mod_attrs = {
|
||||
@ -55,9 +56,11 @@ fn doc_meta(
|
||||
|
||||
fn parse_crate(attrs: [ast::attribute]) -> crate_attrs {
|
||||
let link_metas = attr::find_linkage_metas(attrs);
|
||||
let attr_metas = attr::attr_metas(attrs);
|
||||
|
||||
{
|
||||
name: attr::meta_item_value_from_list(link_metas, "name")
|
||||
name: attr::meta_item_value_from_list(link_metas, "name"),
|
||||
desc: attr::meta_item_value_from_list(attr_metas, "desc")
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,6 +88,14 @@ fn should_not_extract_crate_name_if_no_name_value_in_link_attribute() {
|
||||
assert attrs.name == none;
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_extract_crate_desc() {
|
||||
let source = "#[desc = \"Teddybears\"]";
|
||||
let attrs = test::parse_attributes(source);
|
||||
let attrs = parse_crate(attrs);
|
||||
assert attrs.desc == some("Teddybears");
|
||||
}
|
||||
|
||||
fn parse_mod(attrs: [ast::attribute]) -> mod_attrs {
|
||||
parse_short_doc_or(
|
||||
attrs,
|
||||
|
@ -36,14 +36,25 @@ fn fold_crate(
|
||||
let srv = fold.ctxt;
|
||||
let doc = fold::default_seq_fold_crate(fold, doc);
|
||||
|
||||
// Use various crate attributes to set documentation on the top mod
|
||||
|
||||
let attrs = astsrv::exec(srv) {|ctxt|
|
||||
let attrs = ctxt.ast.node.attrs;
|
||||
attr_parser::parse_crate(attrs)
|
||||
};
|
||||
|
||||
let brief = option::maybe(doc.topmod.brief, attrs.desc) {|desc|
|
||||
if option::is_some(doc.topmod.brief) {
|
||||
#warn("overriding crate brief doc attribute \
|
||||
with crate description");
|
||||
}
|
||||
some(desc)
|
||||
};
|
||||
|
||||
~{
|
||||
topmod: ~{
|
||||
name: option::from_maybe(doc.topmod.name, attrs.name)
|
||||
name: option::from_maybe(doc.topmod.name, attrs.name),
|
||||
brief: brief
|
||||
with *doc.topmod
|
||||
}
|
||||
}
|
||||
@ -59,6 +70,16 @@ fn should_replace_top_module_name_with_crate_name() {
|
||||
assert doc.topmod.name == "bond";
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_replace_top_module_brief_with_crate_desc() {
|
||||
let source = "#[desc = \"The Rust compiler\"];";
|
||||
let srv = astsrv::mk_srv_from_str(source);
|
||||
let doc = extract::from_srv(srv, "");
|
||||
let fold = fold::default_seq_fold(srv);
|
||||
let doc = fold_crate(fold, doc);
|
||||
assert doc.topmod.brief == some("The Rust compiler");
|
||||
}
|
||||
|
||||
fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
|
||||
let srv = fold.ctxt;
|
||||
let attrs = if doc.id == ast::crate_node_id {
|
||||
|
@ -1,5 +1,3 @@
|
||||
#[doc = "Rustdoc - The Rust documentation generator"];
|
||||
|
||||
#[link(name = "rustdoc",
|
||||
vers = "0.1",
|
||||
uuid = "f8abd014-b281-484d-a0c3-26e3de8e2412",
|
||||
|
Loading…
x
Reference in New Issue
Block a user