From cb4a3839222a0501a8f54f3c31dbf8ffa2c2945d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 30 Jan 2012 14:24:41 -0800 Subject: [PATCH] rustdoc: Extract iface doc nodes from the AST --- src/rustdoc/extract.rs | 56 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index d992bc32cd53..64e179c78c03 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -70,6 +70,11 @@ fn moddoc_from_mod( resdoc_from_resource(decl, item.ident, item.id) )) } + ast::item_iface(_, methods) { + some(doc::ifacetag( + ifacedoc_from_iface(methods, item.ident, item.id) + )) + } _ { none } @@ -219,6 +224,57 @@ fn should_extract_resource_args() { assert doc.topmod.resources()[0].args[0].name == "b"; } +fn ifacedoc_from_iface( + methods: [ast::ty_method], + name: str, + id: ast::node_id +) -> doc::ifacedoc { + { + id: id, + name: name, + brief: none, + desc: none, + methods: vec::map(methods) {|method| + { + name: method.ident, + brief: none, + desc: none, + args: argdocs_from_args(method.decl.inputs), + return: { + desc: none, + ty: none + }, + failure: none, + sig: none + } + } + } +} + +#[test] +fn should_extract_ifaces() { + let source = "iface i { fn f(); }"; + let ast = parse::from_str(source); + let doc = extract(ast, ""); + assert doc.topmod.ifaces()[0].name == "i"; +} + +#[test] +fn should_extract_iface_methods() { + let source = "iface i { fn f(); }"; + let ast = parse::from_str(source); + let doc = extract(ast, ""); + assert doc.topmod.ifaces()[0].methods[0].name == "f"; +} + +#[test] +fn should_extract_iface_method_args() { + let source = "iface i { fn f(a: bool); }"; + let ast = parse::from_str(source); + let doc = extract(ast, ""); + assert doc.topmod.ifaces()[0].methods[0].args[0].name == "a"; +} + #[cfg(test)] mod tests {