1
Fork 0

rustdoc: Extract common item fields into itemdoc

This commit is contained in:
Brian Anderson 2012-02-17 14:46:30 -08:00
parent d26fc348ef
commit 784e2b7298
13 changed files with 423 additions and 296 deletions

View file

@ -49,7 +49,10 @@ fn fold_crate(
{ {
topmod: { topmod: {
name: option::from_maybe(doc.topmod.name, attrs.name) item: {
name: option::from_maybe(doc.topmod.name(), attrs.name)
with doc.topmod.item
}
with doc.topmod with doc.topmod
} }
} }
@ -58,7 +61,7 @@ fn fold_crate(
#[test] #[test]
fn should_replace_top_module_name_with_crate_name() { fn should_replace_top_module_name_with_crate_name() {
let doc = test::mk_doc("#[link(name = \"bond\")];"); let doc = test::mk_doc("#[link(name = \"bond\")];");
assert doc.topmod.name == "bond"; assert doc.topmod.name() == "bond";
} }
fn parse_item_attrs<T>( fn parse_item_attrs<T>(
@ -78,13 +81,13 @@ fn parse_item_attrs<T>(
fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc { fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let attrs = if doc.id == ast::crate_node_id { let attrs = if doc.id() == ast::crate_node_id {
// This is the top-level mod, use the crate attributes // This is the top-level mod, use the crate attributes
astsrv::exec(srv) {|ctxt| astsrv::exec(srv) {|ctxt|
attr_parser::parse_mod(ctxt.ast.node.attrs) attr_parser::parse_mod(ctxt.ast.node.attrs)
} }
} else { } else {
parse_item_attrs(srv, doc.id, attr_parser::parse_mod) parse_item_attrs(srv, doc.id(), attr_parser::parse_mod)
}; };
let doc = fold::default_seq_fold_mod(fold, doc); let doc = fold::default_seq_fold_mod(fold, doc);
ret merge_mod_attrs(doc, attrs); ret merge_mod_attrs(doc, attrs);
@ -94,8 +97,11 @@ fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
attrs: attr_parser::mod_attrs attrs: attr_parser::mod_attrs
) -> doc::moddoc { ) -> doc::moddoc {
{ {
brief: attrs.brief, item: {
desc: attrs.desc brief: attrs.brief,
desc: attrs.desc
with doc.item
}
with doc with doc
} }
} }
@ -104,13 +110,13 @@ fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
#[test] #[test]
fn fold_mod_should_extract_mod_attributes() { fn fold_mod_should_extract_mod_attributes() {
let doc = test::mk_doc("#[doc = \"test\"] mod a { }"); let doc = test::mk_doc("#[doc = \"test\"] mod a { }");
assert doc.topmod.mods()[0].desc == some("test"); assert doc.topmod.mods()[0].desc() == some("test");
} }
#[test] #[test]
fn fold_mod_should_extract_top_mod_attributes() { fn fold_mod_should_extract_top_mod_attributes() {
let doc = test::mk_doc("#[doc = \"test\"];"); let doc = test::mk_doc("#[doc = \"test\"];");
assert doc.topmod.desc == some("test"); assert doc.topmod.desc() == some("test");
} }
fn fold_fn( fn fold_fn(
@ -120,7 +126,7 @@ fn fold_fn(
let srv = fold.ctxt; let srv = fold.ctxt;
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_fn); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_fn);
ret merge_fn_attrs(doc, attrs); ret merge_fn_attrs(doc, attrs);
fn merge_fn_attrs( fn merge_fn_attrs(
@ -128,8 +134,11 @@ fn fold_fn(
attrs: attr_parser::fn_attrs attrs: attr_parser::fn_attrs
) -> doc::fndoc { ) -> doc::fndoc {
ret { ret {
brief: attrs.brief, item: {
desc: attrs.desc, brief: attrs.brief,
desc: attrs.desc
with doc.item
},
args: merge_arg_attrs(doc.args, attrs.args), args: merge_arg_attrs(doc.args, attrs.args),
return: merge_ret_attrs(doc.return, attrs.return), return: merge_ret_attrs(doc.return, attrs.return),
failure: attrs.failure failure: attrs.failure
@ -172,7 +181,7 @@ fn merge_ret_attrs(
#[test] #[test]
fn fold_fn_should_extract_fn_attributes() { fn fold_fn_should_extract_fn_attributes() {
let doc = test::mk_doc("#[doc = \"test\"] fn a() -> int { }"); let doc = test::mk_doc("#[doc = \"test\"] fn a() -> int { }");
assert doc.topmod.fns()[0].desc == some("test"); assert doc.topmod.fns()[0].desc() == some("test");
} }
#[test] #[test]
@ -214,11 +223,14 @@ fn fold_const(
doc: doc::constdoc doc: doc::constdoc
) -> doc::constdoc { ) -> doc::constdoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_const); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_const);
{ {
brief: attrs.brief, item: {
desc: attrs.desc brief: attrs.brief,
desc: attrs.desc
with doc.item
}
with doc with doc
} }
} }
@ -227,8 +239,8 @@ fn fold_const(
fn fold_const_should_extract_docs() { fn fold_const_should_extract_docs() {
let doc = test::mk_doc("#[doc(brief = \"foo\", desc = \"bar\")]\ let doc = test::mk_doc("#[doc(brief = \"foo\", desc = \"bar\")]\
const a: bool = true;"); const a: bool = true;");
assert doc.topmod.consts()[0].brief == some("foo"); assert doc.topmod.consts()[0].brief() == some("foo");
assert doc.topmod.consts()[0].desc == some("bar"); assert doc.topmod.consts()[0].desc() == some("bar");
} }
fn fold_enum( fn fold_enum(
@ -236,14 +248,17 @@ fn fold_enum(
doc: doc::enumdoc doc: doc::enumdoc
) -> doc::enumdoc { ) -> doc::enumdoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_enum); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_enum);
{ {
brief: attrs.brief, item: {
desc: attrs.desc, brief: attrs.brief,
desc: attrs.desc
with doc.item
},
variants: vec::map(doc.variants) {|variant| variants: vec::map(doc.variants) {|variant|
let attrs = astsrv::exec(srv) {|ctxt| let attrs = astsrv::exec(srv) {|ctxt|
alt check ctxt.ast_map.get(doc.id) { alt check ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
node: ast::item_enum(ast_variants, _), _ node: ast::item_enum(ast_variants, _), _
}, _) { }, _) {
@ -270,8 +285,8 @@ fn fold_enum(
fn fold_enum_should_extract_docs() { fn fold_enum_should_extract_docs() {
let doc = test::mk_doc("#[doc(brief = \"a\", desc = \"b\")]\ let doc = test::mk_doc("#[doc(brief = \"a\", desc = \"b\")]\
enum a { v }"); enum a { v }");
assert doc.topmod.enums()[0].brief == some("a"); assert doc.topmod.enums()[0].brief() == some("a");
assert doc.topmod.enums()[0].desc == some("b"); assert doc.topmod.enums()[0].desc() == some("b");
} }
#[test] #[test]
@ -286,11 +301,14 @@ fn fold_res(
) -> doc::resdoc { ) -> doc::resdoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_fn); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_fn);
{ {
brief: attrs.brief, item: {
desc: attrs.desc, brief: attrs.brief,
desc: attrs.desc
with doc.item
},
args: vec::map(doc.args) {|doc| args: vec::map(doc.args) {|doc|
alt vec::find(attrs.args) {|attr| alt vec::find(attrs.args) {|attr|
attr.name == doc.name attr.name == doc.name
@ -312,8 +330,8 @@ fn fold_res(
fn fold_res_should_extract_docs() { fn fold_res_should_extract_docs() {
let doc = test::mk_doc("#[doc(brief = \"a\", desc = \"b\")]\ let doc = test::mk_doc("#[doc(brief = \"a\", desc = \"b\")]\
resource r(b: bool) { }"); resource r(b: bool) { }");
assert doc.topmod.resources()[0].brief == some("a"); assert doc.topmod.resources()[0].brief() == some("a");
assert doc.topmod.resources()[0].desc == some("b"); assert doc.topmod.resources()[0].desc() == some("b");
} }
#[test] #[test]
@ -330,12 +348,15 @@ fn fold_iface(
) -> doc::ifacedoc { ) -> doc::ifacedoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let doc = fold::default_seq_fold_iface(fold, doc); let doc = fold::default_seq_fold_iface(fold, doc);
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_iface); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_iface);
{ {
brief: attrs.brief, item: {
desc: attrs.desc, brief: attrs.brief,
methods: merge_method_attrs(srv, doc.id, doc.methods) desc: attrs.desc
with doc.item
},
methods: merge_method_attrs(srv, doc.id(), doc.methods)
with doc with doc
} }
} }
@ -384,7 +405,7 @@ fn merge_method_attrs(
#[test] #[test]
fn should_extract_iface_docs() { fn should_extract_iface_docs() {
let doc = test::mk_doc("#[doc = \"whatever\"] iface i { fn a(); }"); let doc = test::mk_doc("#[doc = \"whatever\"] iface i { fn a(); }");
assert doc.topmod.ifaces()[0].desc == some("whatever"); assert doc.topmod.ifaces()[0].desc() == some("whatever");
} }
#[test] #[test]
@ -413,12 +434,15 @@ fn fold_impl(
) -> doc::impldoc { ) -> doc::impldoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let doc = fold::default_seq_fold_impl(fold, doc); let doc = fold::default_seq_fold_impl(fold, doc);
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_impl); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_impl);
{ {
brief: attrs.brief, item: {
desc: attrs.desc, brief: attrs.brief,
methods: merge_method_attrs(srv, doc.id, doc.methods) desc: attrs.desc
with doc.item
},
methods: merge_method_attrs(srv, doc.id(), doc.methods)
with doc with doc
} }
} }
@ -427,7 +451,7 @@ fn fold_impl(
fn should_extract_impl_docs() { fn should_extract_impl_docs() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc = \"whatever\"] impl i for int { fn a() { } }"); "#[doc = \"whatever\"] impl i for int { fn a() { } }");
assert doc.topmod.impls()[0].desc == some("whatever"); assert doc.topmod.impls()[0].desc() == some("whatever");
} }
#[test] #[test]
@ -455,11 +479,14 @@ fn fold_type(
) -> doc::tydoc { ) -> doc::tydoc {
let srv = fold.ctxt; let srv = fold.ctxt;
let doc = fold::default_seq_fold_type(fold, doc); let doc = fold::default_seq_fold_type(fold, doc);
let attrs = parse_item_attrs(srv, doc.id, attr_parser::parse_type); let attrs = parse_item_attrs(srv, doc.id(), attr_parser::parse_type);
{ {
brief: attrs.brief, item: {
desc: attrs.desc brief: attrs.brief,
desc: attrs.desc
with doc.item
}
with doc with doc
} }
} }
@ -469,8 +496,8 @@ fn should_extract_type_docs() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(brief = \"brief\", desc = \"desc\")]\ "#[doc(brief = \"brief\", desc = \"desc\")]\
type t = int;"); type t = int;");
assert doc.topmod.types()[0].brief == some("brief"); assert doc.topmod.types()[0].brief() == some("brief");
assert doc.topmod.types()[0].desc == some("desc"); assert doc.topmod.types()[0].desc() == some("desc");
} }
#[cfg(test)] #[cfg(test)]

View file

@ -37,8 +37,11 @@ fn fold_mod(fold: fold::fold<op>, doc: doc::moddoc) -> doc::moddoc {
let doc = fold::default_seq_fold_mod(fold, doc); let doc = fold::default_seq_fold_mod(fold, doc);
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc) brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
}
with doc with doc
} }
} }
@ -47,8 +50,11 @@ fn fold_const(fold: fold::fold<op>, doc: doc::constdoc) -> doc::constdoc {
let doc = fold::default_seq_fold_const(fold, doc); let doc = fold::default_seq_fold_const(fold, doc);
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc) brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
}
with doc with doc
} }
} }
@ -57,8 +63,11 @@ fn fold_fn(fold: fold::fold<op>, doc: doc::fndoc) -> doc::fndoc {
let doc = fold::default_seq_fold_fn(fold, doc); let doc = fold::default_seq_fold_fn(fold, doc);
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc), brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
},
args: vec::map(doc.args) {|doc| args: vec::map(doc.args) {|doc|
{ {
desc: maybe_apply_op(fold.ctxt, doc.desc) desc: maybe_apply_op(fold.ctxt, doc.desc)
@ -76,8 +85,11 @@ fn fold_fn(fold: fold::fold<op>, doc: doc::fndoc) -> doc::fndoc {
fn fold_enum(fold: fold::fold<op>, doc: doc::enumdoc) -> doc::enumdoc { fn fold_enum(fold: fold::fold<op>, doc: doc::enumdoc) -> doc::enumdoc {
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc), brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
},
variants: vec::map(doc.variants) {|variant| variants: vec::map(doc.variants) {|variant|
{ {
desc: maybe_apply_op(fold.ctxt, variant.desc) desc: maybe_apply_op(fold.ctxt, variant.desc)
@ -90,8 +102,11 @@ fn fold_enum(fold: fold::fold<op>, doc: doc::enumdoc) -> doc::enumdoc {
fn fold_res(fold: fold::fold<op>, doc: doc::resdoc) -> doc::resdoc { fn fold_res(fold: fold::fold<op>, doc: doc::resdoc) -> doc::resdoc {
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc), brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
},
args: vec::map(doc.args) {|arg| args: vec::map(doc.args) {|arg|
{ {
desc: maybe_apply_op(fold.ctxt, arg.desc) desc: maybe_apply_op(fold.ctxt, arg.desc)
@ -104,8 +119,11 @@ fn fold_res(fold: fold::fold<op>, doc: doc::resdoc) -> doc::resdoc {
fn fold_iface(fold: fold::fold<op>, doc: doc::ifacedoc) -> doc::ifacedoc { fn fold_iface(fold: fold::fold<op>, doc: doc::ifacedoc) -> doc::ifacedoc {
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc), brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
},
methods: apply_to_methods(fold.ctxt, doc.methods) methods: apply_to_methods(fold.ctxt, doc.methods)
with doc with doc
} }
@ -134,8 +152,11 @@ fn apply_to_methods(op: op, docs: [doc::methoddoc]) -> [doc::methoddoc] {
fn fold_impl(fold: fold::fold<op>, doc: doc::impldoc) -> doc::impldoc { fn fold_impl(fold: fold::fold<op>, doc: doc::impldoc) -> doc::impldoc {
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc), brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
},
methods: apply_to_methods(fold.ctxt, doc.methods) methods: apply_to_methods(fold.ctxt, doc.methods)
with doc with doc
} }
@ -143,8 +164,11 @@ fn fold_impl(fold: fold::fold<op>, doc: doc::impldoc) -> doc::impldoc {
fn fold_type(fold: fold::fold<op>, doc: doc::tydoc) -> doc::tydoc { fn fold_type(fold: fold::fold<op>, doc: doc::tydoc) -> doc::tydoc {
{ {
brief: maybe_apply_op(fold.ctxt, doc.brief), item: {
desc: maybe_apply_op(fold.ctxt, doc.desc) brief: maybe_apply_op(fold.ctxt, doc.brief()),
desc: maybe_apply_op(fold.ctxt, doc.desc())
with doc.item
}
with doc with doc
} }
} }
@ -152,13 +176,13 @@ fn fold_type(fold: fold::fold<op>, doc: doc::tydoc) -> doc::tydoc {
#[test] #[test]
fn should_execute_op_on_enum_brief() { fn should_execute_op_on_enum_brief() {
let doc = test::mk_doc("#[doc(brief = \" a \")] enum a { b }"); let doc = test::mk_doc("#[doc(brief = \" a \")] enum a { b }");
assert doc.topmod.enums()[0].brief == some("a"); assert doc.topmod.enums()[0].brief() == some("a");
} }
#[test] #[test]
fn should_execute_op_on_enum_desc() { fn should_execute_op_on_enum_desc() {
let doc = test::mk_doc("#[doc(desc = \" a \")] enum a { b }"); let doc = test::mk_doc("#[doc(desc = \" a \")] enum a { b }");
assert doc.topmod.enums()[0].desc == some("a"); assert doc.topmod.enums()[0].desc() == some("a");
} }
#[test] #[test]
@ -170,13 +194,13 @@ fn should_execute_op_on_variant_desc() {
#[test] #[test]
fn should_execute_op_on_resource_brief() { fn should_execute_op_on_resource_brief() {
let doc = test::mk_doc("#[doc(brief = \" a \")] resource r(a: bool) { }"); let doc = test::mk_doc("#[doc(brief = \" a \")] resource r(a: bool) { }");
assert doc.topmod.resources()[0].brief == some("a"); assert doc.topmod.resources()[0].brief() == some("a");
} }
#[test] #[test]
fn should_execute_op_on_resource_desc() { fn should_execute_op_on_resource_desc() {
let doc = test::mk_doc("#[doc(desc = \" a \")] resource r(a: bool) { }"); let doc = test::mk_doc("#[doc(desc = \" a \")] resource r(a: bool) { }");
assert doc.topmod.resources()[0].desc == some("a"); assert doc.topmod.resources()[0].desc() == some("a");
} }
#[test] #[test]
@ -190,14 +214,14 @@ fn should_execute_op_on_resource_args() {
fn should_execute_op_on_iface_brief() { fn should_execute_op_on_iface_brief() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(brief = \" a \")] iface i { fn a(); }"); "#[doc(brief = \" a \")] iface i { fn a(); }");
assert doc.topmod.ifaces()[0].brief == some("a"); assert doc.topmod.ifaces()[0].brief() == some("a");
} }
#[test] #[test]
fn should_execute_op_on_iface_desc() { fn should_execute_op_on_iface_desc() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(desc = \" a \")] iface i { fn a(); }"); "#[doc(desc = \" a \")] iface i { fn a(); }");
assert doc.topmod.ifaces()[0].desc == some("a"); assert doc.topmod.ifaces()[0].desc() == some("a");
} }
#[test] #[test]
@ -238,14 +262,14 @@ fn should_execute_op_on_iface_method_failure_condition() {
fn should_execute_op_on_impl_brief() { fn should_execute_op_on_impl_brief() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(brief = \" a \")] impl i for int { fn a() { } }"); "#[doc(brief = \" a \")] impl i for int { fn a() { } }");
assert doc.topmod.impls()[0].brief == some("a"); assert doc.topmod.impls()[0].brief() == some("a");
} }
#[test] #[test]
fn should_execute_op_on_impl_desc() { fn should_execute_op_on_impl_desc() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(desc = \" a \")] impl i for int { fn a() { } }"); "#[doc(desc = \" a \")] impl i for int { fn a() { } }");
assert doc.topmod.impls()[0].desc == some("a"); assert doc.topmod.impls()[0].desc() == some("a");
} }
#[test] #[test]
@ -288,14 +312,14 @@ fn should_execute_op_on_impl_method_failure_condition() {
fn should_execute_op_on_type_brief() { fn should_execute_op_on_type_brief() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(brief = \" a \")] type t = int;"); "#[doc(brief = \" a \")] type t = int;");
assert doc.topmod.types()[0].brief == some("a"); assert doc.topmod.types()[0].brief() == some("a");
} }
#[test] #[test]
fn should_execute_op_on_type_desc() { fn should_execute_op_on_type_desc() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(desc = \" a \")] type t = int;"); "#[doc(desc = \" a \")] type t = int;");
assert doc.topmod.types()[0].desc == some("a"); assert doc.topmod.types()[0].desc() == some("a");
} }
#[cfg(test)] #[cfg(test)]

View file

@ -33,66 +33,84 @@ fn run(
fn fold_mod(fold: fold::fold<()>, doc: doc::moddoc) -> doc::moddoc { fn fold_mod(fold: fold::fold<()>, doc: doc::moddoc) -> doc::moddoc {
let doc = fold::default_seq_fold_mod(fold, doc); let doc = fold::default_seq_fold_mod(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
fn fold_const(fold: fold::fold<()>, doc: doc::constdoc) -> doc::constdoc { fn fold_const(fold: fold::fold<()>, doc: doc::constdoc) -> doc::constdoc {
let doc = fold::default_seq_fold_const(fold, doc); let doc = fold::default_seq_fold_const(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
fn fold_fn(fold: fold::fold<()>, doc: doc::fndoc) -> doc::fndoc { fn fold_fn(fold: fold::fold<()>, doc: doc::fndoc) -> doc::fndoc {
let doc = fold::default_seq_fold_fn(fold, doc); let doc = fold::default_seq_fold_fn(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
fn fold_enum(fold: fold::fold<()>, doc: doc::enumdoc) -> doc::enumdoc { fn fold_enum(fold: fold::fold<()>, doc: doc::enumdoc) -> doc::enumdoc {
let doc = fold::default_seq_fold_enum(fold, doc); let doc = fold::default_seq_fold_enum(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
fn fold_res(fold: fold::fold<()>, doc: doc::resdoc) -> doc::resdoc { fn fold_res(fold: fold::fold<()>, doc: doc::resdoc) -> doc::resdoc {
let doc = fold::default_seq_fold_res(fold, doc); let doc = fold::default_seq_fold_res(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
fn fold_iface(fold: fold::fold<()>, doc: doc::ifacedoc) -> doc::ifacedoc { fn fold_iface(fold: fold::fold<()>, doc: doc::ifacedoc) -> doc::ifacedoc {
let doc =fold::default_seq_fold_iface(fold, doc); let doc =fold::default_seq_fold_iface(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc, brief: brief,
desc: desc
with doc.item
},
methods: vec::map(doc.methods) {|doc| methods: vec::map(doc.methods) {|doc|
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief, doc.desc);
@ -108,11 +126,14 @@ fn fold_iface(fold: fold::fold<()>, doc: doc::ifacedoc) -> doc::ifacedoc {
fn fold_impl(fold: fold::fold<()>, doc: doc::impldoc) -> doc::impldoc { fn fold_impl(fold: fold::fold<()>, doc: doc::impldoc) -> doc::impldoc {
let doc =fold::default_seq_fold_impl(fold, doc); let doc =fold::default_seq_fold_impl(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc, brief: brief,
desc: desc
with doc.item
},
methods: vec::map(doc.methods) {|doc| methods: vec::map(doc.methods) {|doc|
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief, doc.desc);
@ -128,11 +149,14 @@ fn fold_impl(fold: fold::fold<()>, doc: doc::impldoc) -> doc::impldoc {
fn fold_type(fold: fold::fold<()>, doc: doc::tydoc) -> doc::tydoc { fn fold_type(fold: fold::fold<()>, doc: doc::tydoc) -> doc::tydoc {
let doc = fold::default_seq_fold_type(fold, doc); let doc = fold::default_seq_fold_type(fold, doc);
let (brief, desc) = modify(doc.brief, doc.desc); let (brief, desc) = modify(doc.brief(), doc.desc());
{ {
brief: brief, item: {
desc: desc brief: brief,
desc: desc
with doc.item
}
with doc with doc
} }
} }
@ -140,44 +164,44 @@ fn fold_type(fold: fold::fold<()>, doc: doc::tydoc) -> doc::tydoc {
#[test] #[test]
fn should_promote_mod_desc() { fn should_promote_mod_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] mod m { }"); let doc = test::mk_doc("#[doc(desc = \"desc\")] mod m { }");
assert doc.topmod.mods()[0].brief == some("desc"); assert doc.topmod.mods()[0].brief() == some("desc");
assert doc.topmod.mods()[0].desc == none; assert doc.topmod.mods()[0].desc() == none;
} }
#[test] #[test]
fn should_promote_const_desc() { fn should_promote_const_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] const a: bool = true;"); let doc = test::mk_doc("#[doc(desc = \"desc\")] const a: bool = true;");
assert doc.topmod.consts()[0].brief == some("desc"); assert doc.topmod.consts()[0].brief() == some("desc");
assert doc.topmod.consts()[0].desc == none; assert doc.topmod.consts()[0].desc() == none;
} }
#[test] #[test]
fn should_promote_fn_desc() { fn should_promote_fn_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] fn a() { }"); let doc = test::mk_doc("#[doc(desc = \"desc\")] fn a() { }");
assert doc.topmod.fns()[0].brief == some("desc"); assert doc.topmod.fns()[0].brief() == some("desc");
assert doc.topmod.fns()[0].desc == none; assert doc.topmod.fns()[0].desc() == none;
} }
#[test] #[test]
fn should_promote_enum_desc() { fn should_promote_enum_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] enum a { b }"); let doc = test::mk_doc("#[doc(desc = \"desc\")] enum a { b }");
assert doc.topmod.enums()[0].brief == some("desc"); assert doc.topmod.enums()[0].brief() == some("desc");
assert doc.topmod.enums()[0].desc == none; assert doc.topmod.enums()[0].desc() == none;
} }
#[test] #[test]
fn should_promote_resource_desc() { fn should_promote_resource_desc() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(desc = \"desc\")] resource r(a: bool) { }"); "#[doc(desc = \"desc\")] resource r(a: bool) { }");
assert doc.topmod.resources()[0].brief == some("desc"); assert doc.topmod.resources()[0].brief() == some("desc");
assert doc.topmod.resources()[0].desc == none; assert doc.topmod.resources()[0].desc() == none;
} }
#[test] #[test]
fn should_promote_iface_desc() { fn should_promote_iface_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] iface i { fn a(); }"); let doc = test::mk_doc("#[doc(desc = \"desc\")] iface i { fn a(); }");
assert doc.topmod.ifaces()[0].brief == some("desc"); assert doc.topmod.ifaces()[0].brief() == some("desc");
assert doc.topmod.ifaces()[0].desc == none; assert doc.topmod.ifaces()[0].desc() == none;
} }
#[test] #[test]
@ -191,8 +215,8 @@ fn should_promote_iface_method_desc() {
fn should_promote_impl_desc() { fn should_promote_impl_desc() {
let doc = test::mk_doc( let doc = test::mk_doc(
"#[doc(desc = \"desc\")] impl i for int { fn a() { } }"); "#[doc(desc = \"desc\")] impl i for int { fn a() { } }");
assert doc.topmod.impls()[0].brief == some("desc"); assert doc.topmod.impls()[0].brief() == some("desc");
assert doc.topmod.impls()[0].desc == none; assert doc.topmod.impls()[0].desc() == none;
} }
#[test] #[test]
@ -206,8 +230,8 @@ fn should_promote_impl_method_desc() {
#[test] #[test]
fn should_promote_type_desc() { fn should_promote_type_desc() {
let doc = test::mk_doc("#[doc(desc = \"desc\")] type t = int;"); let doc = test::mk_doc("#[doc(desc = \"desc\")] type t = int;");
assert doc.topmod.types()[0].brief == some("desc"); assert doc.topmod.types()[0].brief() == some("desc");
assert doc.topmod.types()[0].desc == none; assert doc.topmod.types()[0].desc() == none;
} }
#[cfg(test)] #[cfg(test)]

View file

@ -17,31 +17,27 @@ enum itemtag {
tytag(tydoc) tytag(tydoc)
} }
type moddoc = { type itemdoc = {
id: ast_id, id: ast_id,
name: str, name: str,
path: [str], path: [str],
brief: option<str>, brief: option<str>,
desc: option<str>, desc: option<str>,
};
type moddoc = {
item: itemdoc,
// This box exists to break the structural recursion // This box exists to break the structural recursion
items: ~[itemtag] items: ~[itemtag]
}; };
type constdoc = { type constdoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
ty: option<str> ty: option<str>
}; };
type fndoc = { type fndoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
args: [argdoc], args: [argdoc],
return: retdoc, return: retdoc,
failure: option<str>, failure: option<str>,
@ -60,11 +56,7 @@ type retdoc = {
}; };
type enumdoc = { type enumdoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
variants: [variantdoc] variants: [variantdoc]
}; };
@ -75,21 +67,13 @@ type variantdoc = {
}; };
type resdoc = { type resdoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
args: [argdoc], args: [argdoc],
sig: option<str> sig: option<str>
}; };
type ifacedoc = { type ifacedoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
methods: [methoddoc] methods: [methoddoc]
}; };
@ -104,22 +88,14 @@ type methoddoc = {
}; };
type impldoc = { type impldoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
iface_ty: option<str>, iface_ty: option<str>,
self_ty: option<str>, self_ty: option<str>,
methods: [methoddoc] methods: [methoddoc]
}; };
type tydoc = { type tydoc = {
id: ast_id, item: itemdoc,
name: str,
path: [str],
brief: option<str>,
desc: option<str>,
sig: option<str> sig: option<str>
}; };
@ -199,18 +175,75 @@ impl util for moddoc {
} }
} }
#[doc = "Helper methods on itemtag"] iface item {
impl util for itemtag { fn item() -> itemdoc;
fn name() -> str { }
impl of item for itemtag {
fn item() -> itemdoc {
alt self { alt self {
doc::modtag({name, _}) { name } doc::modtag(doc) { doc.item }
doc::fntag({name, _}) { name } doc::fntag(doc) { doc.item }
doc::consttag({name, _}) { name } doc::consttag(doc) { doc.item }
doc::enumtag({name, _}) { name } doc::enumtag(doc) { doc.item }
doc::restag({name, _}) { name } doc::restag(doc) { doc.item }
doc::ifacetag({name, _}) { name } doc::ifacetag(doc) { doc.item }
doc::impltag({name, _}) { name } doc::impltag(doc) { doc.item }
doc::tytag({name, _}) { name } doc::tytag(doc) { doc.item }
} }
} }
} }
impl of item for moddoc {
fn item() -> itemdoc { self.item }
}
impl of item for fndoc {
fn item() -> itemdoc { self.item }
}
impl of item for constdoc {
fn item() -> itemdoc { self.item }
}
impl of item for enumdoc {
fn item() -> itemdoc { self.item }
}
impl of item for resdoc {
fn item() -> itemdoc { self.item }
}
impl of item for ifacedoc {
fn item() -> itemdoc { self.item }
}
impl of item for impldoc {
fn item() -> itemdoc { self.item }
}
impl of item for tydoc {
fn item() -> itemdoc { self.item }
}
impl util<A:item> for A {
fn id() -> ast_id {
self.item().id
}
fn name() -> str {
self.item().name
}
fn path() -> [str] {
self.item().path
}
fn brief() -> option<str> {
self.item().brief
}
fn desc() -> option<str> {
self.item().desc
}
}

View file

@ -38,11 +38,13 @@ fn moddoc_from_mod(
id: ast::node_id id: ast::node_id
) -> doc::moddoc { ) -> doc::moddoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
items: ~vec::filter_map(module.items) {|item| items: ~vec::filter_map(module.items) {|item|
alt item.node { alt item.node {
ast::item_mod(m) { ast::item_mod(m) {
@ -99,11 +101,13 @@ fn fndoc_from_fn(
id: ast::node_id id: ast::node_id
) -> doc::fndoc { ) -> doc::fndoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
args: argdocs_from_args(decl.inputs), args: argdocs_from_args(decl.inputs),
return: { return: {
desc: none, desc: none,
@ -141,11 +145,13 @@ fn constdoc_from_const(
id: ast::node_id id: ast::node_id
) -> doc::constdoc { ) -> doc::constdoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
ty: none ty: none
} }
} }
@ -153,8 +159,8 @@ fn constdoc_from_const(
#[test] #[test]
fn should_extract_const_name_and_id() { fn should_extract_const_name_and_id() {
let doc = test::mk_doc("const a: int = 0;"); let doc = test::mk_doc("const a: int = 0;");
assert doc.topmod.consts()[0].id != 0; assert doc.topmod.consts()[0].id() != 0;
assert doc.topmod.consts()[0].name == "a"; assert doc.topmod.consts()[0].name() == "a";
} }
fn enumdoc_from_enum( fn enumdoc_from_enum(
@ -163,11 +169,13 @@ fn enumdoc_from_enum(
variants: [ast::variant] variants: [ast::variant]
) -> doc::enumdoc { ) -> doc::enumdoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
variants: variantdocs_from_variants(variants) variants: variantdocs_from_variants(variants)
} }
} }
@ -189,8 +197,8 @@ fn variantdoc_from_variant(variant: ast::variant) -> doc::variantdoc {
#[test] #[test]
fn should_extract_enums() { fn should_extract_enums() {
let doc = test::mk_doc("enum e { v }"); let doc = test::mk_doc("enum e { v }");
assert doc.topmod.enums()[0].id != 0; assert doc.topmod.enums()[0].id() != 0;
assert doc.topmod.enums()[0].name == "e"; assert doc.topmod.enums()[0].name() == "e";
} }
#[test] #[test]
@ -205,11 +213,13 @@ fn resdoc_from_resource(
id: ast::node_id id: ast::node_id
) -> doc::resdoc { ) -> doc::resdoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
args: argdocs_from_args(decl.inputs), args: argdocs_from_args(decl.inputs),
sig: none sig: none
} }
@ -218,8 +228,8 @@ fn resdoc_from_resource(
#[test] #[test]
fn should_extract_resources() { fn should_extract_resources() {
let doc = test::mk_doc("resource r(b: bool) { }"); let doc = test::mk_doc("resource r(b: bool) { }");
assert doc.topmod.resources()[0].id != 0; assert doc.topmod.resources()[0].id() != 0;
assert doc.topmod.resources()[0].name == "r"; assert doc.topmod.resources()[0].name() == "r";
} }
#[test] #[test]
@ -234,11 +244,13 @@ fn ifacedoc_from_iface(
id: ast::node_id id: ast::node_id
) -> doc::ifacedoc { ) -> doc::ifacedoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
methods: vec::map(methods) {|method| methods: vec::map(methods) {|method|
{ {
name: method.ident, name: method.ident,
@ -259,7 +271,7 @@ fn ifacedoc_from_iface(
#[test] #[test]
fn should_extract_ifaces() { fn should_extract_ifaces() {
let doc = test::mk_doc("iface i { fn f(); }"); let doc = test::mk_doc("iface i { fn f(); }");
assert doc.topmod.ifaces()[0].name == "i"; assert doc.topmod.ifaces()[0].name() == "i";
} }
#[test] #[test]
@ -280,11 +292,13 @@ fn impldoc_from_impl(
id: ast::node_id id: ast::node_id
) -> doc::impldoc { ) -> doc::impldoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
iface_ty: none, iface_ty: none,
self_ty: none, self_ty: none,
methods: vec::map(methods) {|method| methods: vec::map(methods) {|method|
@ -307,13 +321,13 @@ fn impldoc_from_impl(
#[test] #[test]
fn should_extract_impls_with_names() { fn should_extract_impls_with_names() {
let doc = test::mk_doc("impl i for int { fn a() { } }"); let doc = test::mk_doc("impl i for int { fn a() { } }");
assert doc.topmod.impls()[0].name == "i"; assert doc.topmod.impls()[0].name() == "i";
} }
#[test] #[test]
fn should_extract_impls_without_names() { fn should_extract_impls_without_names() {
let doc = test::mk_doc("impl of i for int { fn a() { } }"); let doc = test::mk_doc("impl of i for int { fn a() { } }");
assert doc.topmod.impls()[0].name == "i"; assert doc.topmod.impls()[0].name() == "i";
} }
#[test] #[test]
@ -333,11 +347,13 @@ fn tydoc_from_ty(
id: ast::node_id id: ast::node_id
) -> doc::tydoc { ) -> doc::tydoc {
{ {
id: id, item: {
name: name, id: id,
path: [], name: name,
brief: none, path: [],
desc: none, brief: none,
desc: none,
},
sig: none sig: none
} }
} }
@ -345,7 +361,7 @@ fn tydoc_from_ty(
#[test] #[test]
fn should_extract_tys() { fn should_extract_tys() {
let doc = test::mk_doc("type a = int;"); let doc = test::mk_doc("type a = int;");
assert doc.topmod.types()[0].name == "a"; assert doc.topmod.types()[0].name() == "a";
} }
#[cfg(test)] #[cfg(test)]
@ -366,21 +382,21 @@ mod test {
#[test] #[test]
fn extract_mods() { fn extract_mods() {
let doc = mk_doc("mod a { mod b { } mod c { } }"); let doc = mk_doc("mod a { mod b { } mod c { } }");
assert doc.topmod.mods()[0].name == "a"; assert doc.topmod.mods()[0].name() == "a";
assert doc.topmod.mods()[0].mods()[0].name == "b"; assert doc.topmod.mods()[0].mods()[0].name() == "b";
assert doc.topmod.mods()[0].mods()[1].name == "c"; assert doc.topmod.mods()[0].mods()[1].name() == "c";
} }
#[test] #[test]
fn extract_mods_deep() { fn extract_mods_deep() {
let doc = mk_doc("mod a { mod b { mod c { } } }"); let doc = mk_doc("mod a { mod b { mod c { } } }");
assert doc.topmod.mods()[0].mods()[0].mods()[0].name == "c"; assert doc.topmod.mods()[0].mods()[0].mods()[0].name() == "c";
} }
#[test] #[test]
fn extract_should_set_mod_ast_id() { fn extract_should_set_mod_ast_id() {
let doc = mk_doc("mod a { }"); let doc = mk_doc("mod a { }");
assert doc.topmod.mods()[0].id != 0; assert doc.topmod.mods()[0].id() != 0;
} }
#[test] #[test]
@ -388,14 +404,14 @@ mod test {
let doc = mk_doc( let doc = mk_doc(
"fn a() { } \ "fn a() { } \
mod b { fn c() { } }"); mod b { fn c() { } }");
assert doc.topmod.fns()[0].name == "a"; assert doc.topmod.fns()[0].name() == "a";
assert doc.topmod.mods()[0].fns()[0].name == "c"; assert doc.topmod.mods()[0].fns()[0].name() == "c";
} }
#[test] #[test]
fn extract_should_set_fn_ast_id() { fn extract_should_set_fn_ast_id() {
let doc = mk_doc("fn a() { }"); let doc = mk_doc("fn a() { }");
assert doc.topmod.fns()[0].id != 0; assert doc.topmod.fns()[0].id() != 0;
} }
#[test] #[test]
@ -403,7 +419,7 @@ mod test {
let source = ""; let source = "";
let ast = parse::from_str(source); let ast = parse::from_str(source);
let doc = extract(ast, "burp"); let doc = extract(ast, "burp");
assert doc.topmod.name == "burp"; assert doc.topmod.name() == "burp";
} }
#[test] #[test]
@ -411,6 +427,6 @@ mod test {
let source = ""; let source = "";
let srv = astsrv::mk_srv_from_str(source); let srv = astsrv::mk_srv_from_str(source);
let doc = from_srv(srv, "name"); let doc = from_srv(srv, "name");
assert doc.topmod.name == "name"; assert doc.topmod.name() == "name";
} }
} }

View file

@ -97,7 +97,7 @@ fn write_crate(
ctxt: ctxt, ctxt: ctxt,
doc: doc::cratedoc doc: doc::cratedoc
) { ) {
write_header(ctxt, h1, #fmt("Crate %s", doc.topmod.name)); write_header(ctxt, h1, #fmt("Crate %s", doc.topmod.name()));
write_top_module(ctxt, doc.topmod); write_top_module(ctxt, doc.topmod);
} }
@ -112,7 +112,7 @@ fn write_mod(
ctxt: ctxt, ctxt: ctxt,
moddoc: doc::moddoc moddoc: doc::moddoc
) { ) {
let fullpath = str::connect(moddoc.path + [moddoc.name], "::"); let fullpath = str::connect(moddoc.path() + [moddoc.name()], "::");
write_header(ctxt, h1, #fmt("Module `%s`", fullpath)); write_header(ctxt, h1, #fmt("Module `%s`", fullpath));
write_mod_contents(ctxt, moddoc); write_mod_contents(ctxt, moddoc);
} }
@ -127,8 +127,8 @@ fn write_mod_contents(
ctxt: ctxt, ctxt: ctxt,
doc: doc::moddoc doc: doc::moddoc
) { ) {
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
for itemtag in *doc.items { for itemtag in *doc.items {
alt itemtag { alt itemtag {
@ -160,12 +160,12 @@ fn write_fn(
ctxt: ctxt, ctxt: ctxt,
doc: doc::fndoc doc: doc::fndoc
) { ) {
write_header(ctxt, h2, #fmt("Function `%s`", doc.name)); write_header(ctxt, h2, #fmt("Function `%s`", doc.name()));
write_fnlike( write_fnlike(
ctxt, ctxt,
doc.sig, doc.sig,
doc.brief, doc.brief(),
doc.desc, doc.desc(),
doc.args, doc.args,
doc.return, doc.return,
doc.failure doc.failure
@ -424,10 +424,10 @@ fn write_const(
ctxt: ctxt, ctxt: ctxt,
doc: doc::constdoc doc: doc::constdoc
) { ) {
write_header(ctxt, h2, #fmt("Const `%s`", doc.name)); write_header(ctxt, h2, #fmt("Const `%s`", doc.name()));
write_sig(ctxt, doc.ty); write_sig(ctxt, doc.ty);
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
} }
#[test] #[test]
@ -448,9 +448,9 @@ fn write_enum(
ctxt: ctxt, ctxt: ctxt,
doc: doc::enumdoc doc: doc::enumdoc
) { ) {
write_header(ctxt, h2, #fmt("Enum `%s`", doc.name)); write_header(ctxt, h2, #fmt("Enum `%s`", doc.name()));
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
write_variants(ctxt, doc.variants); write_variants(ctxt, doc.variants);
} }
@ -530,10 +530,10 @@ fn should_write_variant_list_with_signatures() {
} }
fn write_res(ctxt: ctxt, doc: doc::resdoc) { fn write_res(ctxt: ctxt, doc: doc::resdoc) {
write_header(ctxt, h2, #fmt("Resource `%s`", doc.name)); write_header(ctxt, h2, #fmt("Resource `%s`", doc.name()));
write_sig(ctxt, doc.sig); write_sig(ctxt, doc.sig);
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
write_args(ctxt, doc.args); write_args(ctxt, doc.args);
} }
@ -557,9 +557,9 @@ fn should_write_resource_args() {
} }
fn write_iface(ctxt: ctxt, doc: doc::ifacedoc) { fn write_iface(ctxt: ctxt, doc: doc::ifacedoc) {
write_header(ctxt, h2, #fmt("Interface `%s`", doc.name)); write_header(ctxt, h2, #fmt("Interface `%s`", doc.name()));
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
write_methods(ctxt, doc.methods); write_methods(ctxt, doc.methods);
} }
@ -656,16 +656,16 @@ fn write_impl(ctxt: ctxt, doc: doc::impldoc) {
some(iface_ty) { some(iface_ty) {
write_header(ctxt, h2, write_header(ctxt, h2,
#fmt("Implementation `%s` of `%s` for `%s`", #fmt("Implementation `%s` of `%s` for `%s`",
doc.name, iface_ty, self_ty)); doc.name(), iface_ty, self_ty));
} }
none { none {
write_header(ctxt, h2, write_header(ctxt, h2,
#fmt("Implementation `%s` for `%s`", #fmt("Implementation `%s` for `%s`",
doc.name, self_ty)); doc.name(), self_ty));
} }
} }
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
write_methods(ctxt, doc.methods); write_methods(ctxt, doc.methods);
} }
@ -748,10 +748,10 @@ fn write_type(
ctxt: ctxt, ctxt: ctxt,
doc: doc::tydoc doc: doc::tydoc
) { ) {
write_header(ctxt, h2, #fmt("Type `%s`", doc.name)); write_header(ctxt, h2, #fmt("Type `%s`", doc.name()));
write_sig(ctxt, doc.sig); write_sig(ctxt, doc.sig);
write_brief(ctxt, doc.brief); write_brief(ctxt, doc.brief());
write_desc(ctxt, doc.desc); write_desc(ctxt, doc.desc());
} }
#[test] #[test]

View file

@ -27,13 +27,16 @@ fn run(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc {
} }
fn fold_mod(fold: fold::fold<ctxt>, doc: doc::moddoc) -> doc::moddoc { fn fold_mod(fold: fold::fold<ctxt>, doc: doc::moddoc) -> doc::moddoc {
let is_topmod = doc.id == rustc::syntax::ast::crate_node_id; let is_topmod = doc.id() == rustc::syntax::ast::crate_node_id;
if !is_topmod { vec::push(fold.ctxt.path, doc.name); } if !is_topmod { vec::push(fold.ctxt.path, doc.name()); }
let doc = fold::default_seq_fold_mod(fold, doc); let doc = fold::default_seq_fold_mod(fold, doc);
if !is_topmod { vec::pop(fold.ctxt.path); } if !is_topmod { vec::pop(fold.ctxt.path); }
{ {
path: fold.ctxt.path item: {
path: fold.ctxt.path
with doc.item
}
with doc with doc
} }
} }
@ -44,6 +47,6 @@ fn should_record_mod_paths() {
let srv = astsrv::mk_srv_from_str(source); let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, ""); let doc = extract::from_srv(srv, "");
let doc = run(srv, doc); let doc = run(srv, doc);
assert doc.topmod.mods()[0].mods()[0].mods()[0].path == ["a", "b"]; assert doc.topmod.mods()[0].mods()[0].mods()[0].path() == ["a", "b"];
assert doc.topmod.mods()[0].mods()[1].mods()[0].path == ["a", "d"]; assert doc.topmod.mods()[0].mods()[1].mods()[0].path() == ["a", "d"];
} }

View file

@ -108,8 +108,8 @@ fn fold_mod(
with fold::default_seq_fold_mod(fold, doc) with fold::default_seq_fold_mod(fold, doc)
}; };
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| vec::is_not_empty(*doc.items); || vec::is_not_empty(*doc.items);
ret doc; ret doc;
} }
@ -121,8 +121,8 @@ fn fold_fn(
let doc = fold::default_seq_fold_fn(fold, doc); let doc = fold::default_seq_fold_fn(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| args_have_docs(doc.args) || args_have_docs(doc.args)
|| doc.return.desc != none || doc.return.desc != none
|| doc.failure != none; || doc.failure != none;
@ -183,8 +183,8 @@ fn fold_const(
) -> doc::constdoc { ) -> doc::constdoc {
let doc = fold::default_seq_fold_const(fold, doc); let doc = fold::default_seq_fold_const(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none; || doc.desc() != none;
ret doc; ret doc;
} }
@ -206,8 +206,8 @@ fn fold_enum(fold: fold::fold<ctxt>, doc: doc::enumdoc) -> doc::enumdoc {
with fold::default_seq_fold_enum(fold, doc) with fold::default_seq_fold_enum(fold, doc)
}; };
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| vec::is_not_empty(doc.variants); || vec::is_not_empty(doc.variants);
ret doc; ret doc;
} }
@ -234,8 +234,8 @@ fn fold_res(fold: fold::fold<ctxt>, doc: doc::resdoc) -> doc::resdoc {
let doc = fold::default_seq_fold_res(fold, doc); let doc = fold::default_seq_fold_res(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| args_have_docs(doc.args); || args_have_docs(doc.args);
ret doc; ret doc;
} }
@ -260,8 +260,8 @@ fn fold_iface(
let doc = fold::default_seq_fold_iface(fold, doc); let doc = fold::default_seq_fold_iface(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| methods_have_docs(doc.methods); || methods_have_docs(doc.methods);
ret doc; ret doc;
} }
@ -314,8 +314,8 @@ fn fold_impl(
let doc = fold::default_seq_fold_impl(fold, doc); let doc = fold::default_seq_fold_impl(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none || doc.desc() != none
|| methods_have_docs(doc.methods); || methods_have_docs(doc.methods);
ret doc; ret doc;
} }
@ -351,8 +351,8 @@ fn fold_type(
let doc = fold::default_seq_fold_type(fold, doc); let doc = fold::default_seq_fold_type(fold, doc);
fold.ctxt.have_docs = fold.ctxt.have_docs =
doc.brief != none doc.brief() != none
|| doc.desc != none; || doc.desc() != none;
ret doc; ret doc;
} }

View file

@ -40,7 +40,7 @@ fn exported_things<T>(
from_crate: fn(astsrv::srv, doc::moddoc) -> [T], from_crate: fn(astsrv::srv, doc::moddoc) -> [T],
from_mod: fn(astsrv::srv, doc::moddoc) -> [T] from_mod: fn(astsrv::srv, doc::moddoc) -> [T]
) -> [T] { ) -> [T] {
if doc.id == ast::crate_node_id { if doc.id() == ast::crate_node_id {
from_crate(srv, doc) from_crate(srv, doc)
} else { } else {
from_mod(srv, doc) from_mod(srv, doc)
@ -58,7 +58,7 @@ fn exported_items_from_mod(
srv: astsrv::srv, srv: astsrv::srv,
doc: doc::moddoc doc: doc::moddoc
) -> [doc::itemtag] { ) -> [doc::itemtag] {
exported_items_from(srv, doc, bind is_exported_from_mod(_, doc.id, _)) exported_items_from(srv, doc, bind is_exported_from_mod(_, doc.id(), _))
} }
fn exported_items_from( fn exported_items_from(

View file

@ -2,6 +2,8 @@
* Copyright 2011 Google Inc. * Copyright 2011 Google Inc.
*/ */
// Some utility interfaces
import doc::item;
import doc::util; import doc::util;
#[doc = "A single operation on the document model"] #[doc = "A single operation on the document model"]
@ -46,11 +48,10 @@ fn test_run_passes() {
) -> doc::cratedoc { ) -> doc::cratedoc {
{ {
topmod: { topmod: {
id: 0, item: {
name: doc.topmod.name + "two", name: doc.topmod.name() + "two"
path: [], with doc.topmod.item
brief: none, },
desc: none,
items: ~[] items: ~[]
} }
} }
@ -61,11 +62,10 @@ fn test_run_passes() {
) -> doc::cratedoc { ) -> doc::cratedoc {
{ {
topmod: { topmod: {
id: 0, item: {
name: doc.topmod.name + "three", name: doc.topmod.name() + "three"
path: [], with doc.topmod.item
brief: none, },
desc: none,
items: ~[] items: ~[]
} }
} }
@ -75,7 +75,7 @@ fn test_run_passes() {
let passes = [pass1, pass2]; let passes = [pass1, pass2];
let doc = extract::from_srv(srv, "one"); let doc = extract::from_srv(srv, "one");
let doc = run_passes(srv, doc, passes); let doc = run_passes(srv, doc, passes);
assert doc.topmod.name == "onetwothree"; assert doc.topmod.name() == "onetwothree";
} }
fn main(argv: [str]) { fn main(argv: [str]) {

View file

@ -45,10 +45,10 @@ fn test() {
let srv = astsrv::mk_srv_from_str(source); let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, ""); let doc = extract::from_srv(srv, "");
let doc = mk_pass(name_lteq)(srv, doc); let doc = mk_pass(name_lteq)(srv, doc);
assert doc.topmod.mods()[0].name == "w"; assert doc.topmod.mods()[0].name() == "w";
assert doc.topmod.mods()[1].items[0].name() == "x"; assert doc.topmod.mods()[1].items[0].name() == "x";
assert doc.topmod.mods()[1].items[1].name() == "y"; assert doc.topmod.mods()[1].items[1].name() == "y";
assert doc.topmod.mods()[1].name == "z"; assert doc.topmod.mods()[1].name() == "z";
} }
#[test] #[test]

View file

@ -18,8 +18,8 @@ fn should_trim_mod() {
let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \ let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \
desc = \"\ndesc\n\")] \ desc = \"\ndesc\n\")] \
mod m { }"); mod m { }");
assert doc.topmod.mods()[0].brief == some("brief"); assert doc.topmod.mods()[0].brief() == some("brief");
assert doc.topmod.mods()[0].desc == some("desc"); assert doc.topmod.mods()[0].desc() == some("desc");
} }
#[test] #[test]
@ -27,8 +27,8 @@ fn should_trim_const() {
let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \ let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \
desc = \"\ndesc\n\")] \ desc = \"\ndesc\n\")] \
const a: bool = true;"); const a: bool = true;");
assert doc.topmod.consts()[0].brief == some("brief"); assert doc.topmod.consts()[0].brief() == some("brief");
assert doc.topmod.consts()[0].desc == some("desc"); assert doc.topmod.consts()[0].desc() == some("desc");
} }
#[test] #[test]
@ -36,8 +36,8 @@ fn should_trim_fn() {
let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \ let doc = test::mk_doc("#[doc(brief = \"\nbrief\n\", \
desc = \"\ndesc\n\")] \ desc = \"\ndesc\n\")] \
fn a() { }"); fn a() { }");
assert doc.topmod.fns()[0].brief == some("brief"); assert doc.topmod.fns()[0].brief() == some("brief");
assert doc.topmod.fns()[0].desc == some("desc"); assert doc.topmod.fns()[0].desc() == some("desc");
} }
#[test] #[test]

View file

@ -36,9 +36,9 @@ fn fold_fn(
let srv = fold.ctxt; let srv = fold.ctxt;
{ {
args: merge_arg_tys(srv, doc.id, doc.args), args: merge_arg_tys(srv, doc.id(), doc.args),
return: merge_ret_ty(srv, doc.id, doc.return), return: merge_ret_ty(srv, doc.id(), doc.return),
sig: get_fn_sig(srv, doc.id) sig: get_fn_sig(srv, doc.id())
with doc with doc
} }
} }
@ -164,7 +164,7 @@ fn fold_const(
{ {
ty: some(astsrv::exec(srv) {|ctxt| ty: some(astsrv::exec(srv) {|ctxt|
alt check ctxt.ast_map.get(doc.id) { alt check ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
node: ast::item_const(ty, _), _ node: ast::item_const(ty, _), _
}, _) { }, _) {
@ -191,7 +191,7 @@ fn fold_enum(
{ {
variants: vec::map(doc.variants) {|variant| variants: vec::map(doc.variants) {|variant|
let sig = astsrv::exec(srv) {|ctxt| let sig = astsrv::exec(srv) {|ctxt|
alt check ctxt.ast_map.get(doc.id) { alt check ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
node: ast::item_enum(ast_variants, _), _ node: ast::item_enum(ast_variants, _), _
}, _) { }, _) {
@ -227,13 +227,13 @@ fn fold_res(
let srv = fold.ctxt; let srv = fold.ctxt;
{ {
args: merge_arg_tys(srv, doc.id, doc.args), args: merge_arg_tys(srv, doc.id(), doc.args),
sig: some(astsrv::exec(srv) {|ctxt| sig: some(astsrv::exec(srv) {|ctxt|
alt check ctxt.ast_map.get(doc.id) { alt check ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
node: ast::item_res(decl, _, _, _, _), _ node: ast::item_res(decl, _, _, _, _), _
}, _) { }, _) {
pprust::res_to_str(decl, doc.name, []) pprust::res_to_str(decl, doc.name(), [])
} }
} }
}) })
@ -258,7 +258,7 @@ fn fold_iface(
doc: doc::ifacedoc doc: doc::ifacedoc
) -> doc::ifacedoc { ) -> doc::ifacedoc {
{ {
methods: merge_methods(fold.ctxt, doc.id, doc.methods) methods: merge_methods(fold.ctxt, doc.id(), doc.methods)
with doc with doc
} }
} }
@ -456,7 +456,7 @@ fn fold_impl(
let srv = fold.ctxt; let srv = fold.ctxt;
let (iface_ty, self_ty) = astsrv::exec(srv) {|ctxt| let (iface_ty, self_ty) = astsrv::exec(srv) {|ctxt|
alt ctxt.ast_map.get(doc.id) { alt ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
node: ast::item_impl(_, iface_ty, self_ty, _), _ node: ast::item_impl(_, iface_ty, self_ty, _), _
}, _) { }, _) {
@ -472,7 +472,7 @@ fn fold_impl(
{ {
iface_ty: iface_ty, iface_ty: iface_ty,
self_ty: self_ty, self_ty: self_ty,
methods: merge_methods(fold.ctxt, doc.id, doc.methods) methods: merge_methods(fold.ctxt, doc.id(), doc.methods)
with doc with doc
} }
} }
@ -530,7 +530,7 @@ fn fold_type(
{ {
sig: astsrv::exec(srv) {|ctxt| sig: astsrv::exec(srv) {|ctxt|
alt ctxt.ast_map.get(doc.id) { alt ctxt.ast_map.get(doc.id()) {
ast_map::node_item(@{ ast_map::node_item(@{
ident: ident, ident: ident,
node: ast::item_ty(ty, params), _ node: ast::item_ty(ty, params), _