]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Add fn arg descriptions to the doc tree
authorBrian Anderson <banderson@mozilla.com>
Thu, 19 Jan 2012 06:24:29 +0000 (22:24 -0800)
committerBrian Anderson <banderson@mozilla.com>
Thu, 19 Jan 2012 06:24:29 +0000 (22:24 -0800)
src/rustdoc/attr_pass.rs
src/rustdoc/doc.rs
src/rustdoc/extract.rs

index 8a0983296a869487effae3168d11a8cdaba8cf50..a804a836248640c81ec2774b403ad1fb9cc335fe 100644 (file)
@@ -154,11 +154,23 @@ fn merge_fn_attrs(
     }
 
     fn merge_arg_attrs(
-        doc: [doc::argdoc],
-        _attrs: [attr_parser::arg_attrs]
+        docs: [doc::argdoc],
+        attrs: [attr_parser::arg_attrs]
     ) -> [doc::argdoc] {
-        // FIXME
-        doc
+        vec::map(docs) {|doc|
+            alt vec::find(attrs) {|attr|
+                attr.name == doc.name
+            } {
+                some(attr) {
+                    ~{
+                        desc: some(attr.desc)
+                        with *doc
+                    }
+                }
+                none. { doc }
+            }
+        }
+        // FIXME: Warning when documenting a non-existant arg
     }
 
     fn merge_ret_attrs(
@@ -179,3 +191,13 @@ fn fold_fn_should_extract_fn_attributes() {
     let doc = fold_fn(fold, doc.topmod.fns[0]);
     assert doc.desc == some("test");
 }
+
+#[test]
+fn fold_fn_should_extract_arg_attributes() {
+    let source = "#[doc(args(a = \"b\"))] fn c(a: bool) { }";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let fold = fold::default_seq_fold(srv);
+    let doc = fold_fn(fold, doc.topmod.fns[0]);
+    assert doc.args[0].desc == some("b");
+}
\ No newline at end of file
index c084bfe2657e6087cbc008a6dd44ae9a3bef04db..d811eaf13c68379b265165b3977da6bfa56b9c7d 100644 (file)
@@ -26,6 +26,7 @@
 
 type argdoc = ~{
     name: str,
+    desc: option<str>,
     ty: option<str>
 };
 
index 68eeb419f1a2f0767488639eeaf2e14776b7e534..08f437a44c0630625ef01c10db4ed4a0946da6a7 100644 (file)
@@ -100,6 +100,7 @@ fn argdocs_from_args(args: [ast::arg]) -> [doc::argdoc] {
 fn argdoc_from_arg(arg: ast::arg) -> doc::argdoc {
     ~{
         name: arg.ident,
+        desc: none,
         ty: none
     }
 }