about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-30 14:24:41 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-30 19:37:32 -0800
commitcb4a3839222a0501a8f54f3c31dbf8ffa2c2945d (patch)
treeca99a8f1954d726712de58463d7f948dc97619fd
parentd3aa1748461e1220fb26a6e556a78b88a32cc2bd (diff)
downloadrust-cb4a3839222a0501a8f54f3c31dbf8ffa2c2945d.tar.gz
rust-cb4a3839222a0501a8f54f3c31dbf8ffa2c2945d.zip
rustdoc: Extract iface doc nodes from the AST
-rw-r--r--src/rustdoc/extract.rs56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs
index d992bc32cd5..64e179c78c0 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 {