rustdoc: Get the crate brief description from the 'desc' attr

This commit is contained in:
Brian Anderson 2012-01-23 15:15:57 -08:00
parent 7857dcb88c
commit 521e58a3c4
3 changed files with 35 additions and 5 deletions

View File

@ -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,

View File

@ -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 {

View File

@ -1,5 +1,3 @@
#[doc = "Rustdoc - The Rust documentation generator"];
#[link(name = "rustdoc",
vers = "0.1",
uuid = "f8abd014-b281-484d-a0c3-26e3de8e2412",