rustdoc: Pull impl docs out of attributes
This commit is contained in:
parent
23042a3566
commit
496205c85f
2 changed files with 67 additions and 5 deletions
|
@ -11,10 +11,10 @@ import core::tuple;
|
|||
|
||||
export crate_attrs, mod_attrs, fn_attrs, arg_attrs,
|
||||
const_attrs, enum_attrs, variant_attrs, res_attrs,
|
||||
iface_attrs, method_attrs;
|
||||
iface_attrs, method_attrs, impl_attrs;
|
||||
export parse_crate, parse_mod, parse_fn, parse_const,
|
||||
parse_enum, parse_variant, parse_res,
|
||||
parse_iface, parse_method;
|
||||
parse_iface, parse_method, parse_impl;
|
||||
|
||||
type crate_attrs = {
|
||||
name: option<str>
|
||||
|
@ -63,6 +63,11 @@ type iface_attrs = {
|
|||
desc: option<str>
|
||||
};
|
||||
|
||||
type impl_attrs = {
|
||||
brief: option<str>,
|
||||
desc: option<str>
|
||||
};
|
||||
|
||||
type method_attrs = fn_attrs;
|
||||
|
||||
#[cfg(test)]
|
||||
|
@ -499,3 +504,7 @@ fn parse_iface(attrs: [ast::attribute]) -> iface_attrs {
|
|||
fn parse_method(attrs: [ast::attribute]) -> method_attrs {
|
||||
parse_fn(attrs)
|
||||
}
|
||||
|
||||
fn parse_impl(attrs: [ast::attribute]) -> impl_attrs {
|
||||
parse_basic(attrs)
|
||||
}
|
|
@ -26,7 +26,8 @@ fn run(
|
|||
fold_const: fold_const,
|
||||
fold_enum: fold_enum,
|
||||
fold_res: fold_res,
|
||||
fold_iface: fold_iface
|
||||
fold_iface: fold_iface,
|
||||
fold_impl: fold_impl
|
||||
with *fold::default_seq_fold(srv)
|
||||
});
|
||||
fold.fold_crate(fold, doc)
|
||||
|
@ -398,9 +399,14 @@ fn merge_method_attrs(
|
|||
(method.ident, attr_parser::parse_method(method.attrs))
|
||||
}
|
||||
}
|
||||
_ {
|
||||
fail "Undocumented invariant in merge_method_attrs";
|
||||
ast_map::node_item(@{
|
||||
node: ast::item_impl(_, _, _, methods), _
|
||||
}) {
|
||||
vec::map(methods) {|method|
|
||||
(method.ident, attr_parser::parse_method(method.attrs))
|
||||
}
|
||||
}
|
||||
_ { fail "unexpected item" }
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -448,3 +454,50 @@ fn should_extract_iface_method_docs() {
|
|||
assert doc.topmod.ifaces()[0].methods[0].return.desc == some("return");
|
||||
assert doc.topmod.ifaces()[0].methods[0].failure == some("failure");
|
||||
}
|
||||
|
||||
|
||||
fn fold_impl(
|
||||
fold: fold::fold<astsrv::srv>,
|
||||
doc: doc::impldoc
|
||||
) -> doc::impldoc {
|
||||
let srv = fold.ctxt;
|
||||
let doc = fold::default_seq_fold_impl(fold, doc);
|
||||
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_impl);
|
||||
|
||||
{
|
||||
brief: attrs.brief,
|
||||
desc: attrs.desc,
|
||||
methods: merge_method_attrs(srv, doc.id, doc.methods)
|
||||
with doc
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_extract_impl_docs() {
|
||||
let source = "#[doc = \"whatever\"] impl i for int { fn a() { } }";
|
||||
let srv = astsrv::mk_srv_from_str(source);
|
||||
let doc = extract::from_srv(srv, "");
|
||||
let doc = run(srv, doc);
|
||||
assert doc.topmod.impls()[0].desc == some("whatever");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_extract_impl_method_docs() {
|
||||
let source = "impl i for int {\
|
||||
#[doc(\
|
||||
brief = \"brief\",\
|
||||
desc = \"desc\",\
|
||||
args(a = \"a\"),\
|
||||
return = \"return\",\
|
||||
failure = \"failure\")]\
|
||||
fn f(a: bool) -> bool { }\
|
||||
}";
|
||||
let srv = astsrv::mk_srv_from_str(source);
|
||||
let doc = extract::from_srv(srv, "");
|
||||
let doc = run(srv, doc);
|
||||
assert doc.topmod.impls()[0].methods[0].brief == some("brief");
|
||||
assert doc.topmod.impls()[0].methods[0].desc == some("desc");
|
||||
assert doc.topmod.impls()[0].methods[0].args[0].desc == some("a");
|
||||
assert doc.topmod.impls()[0].methods[0].return.desc == some("return");
|
||||
assert doc.topmod.impls()[0].methods[0].failure == some("failure");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue