about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-26 22:07:14 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-26 22:07:14 -0800
commit06ab83de2c72ebaf87b33133007a0dd0e79962db (patch)
tree5fb07b4ca8ccfa46f94e9449598033f8b66f029b
parentce7d1504934ce27560dbb54ece342c2443469468 (diff)
downloadrust-06ab83de2c72ebaf87b33133007a0dd0e79962db.tar.gz
rust-06ab83de2c72ebaf87b33133007a0dd0e79962db.zip
rustdoc: Prune undocumented resources
-rw-r--r--src/rustdoc/fold.rs1
-rw-r--r--src/rustdoc/prune_undoc_pass.rs67
2 files changed, 67 insertions, 1 deletions
diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs
index 607f2411234..6f20870691e 100644
--- a/src/rustdoc/fold.rs
+++ b/src/rustdoc/fold.rs
@@ -9,6 +9,7 @@ export default_seq_fold_mod;
 export default_seq_fold_fn;
 export default_seq_fold_const;
 export default_seq_fold_enum;
+export default_seq_fold_res;
 export default_seq_fold_fnlist;
 
 enum fold<T> = t<T>;
diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs
index 5e2b59d0e41..11be00eea85 100644
--- a/src/rustdoc/prune_undoc_pass.rs
+++ b/src/rustdoc/prune_undoc_pass.rs
@@ -22,10 +22,12 @@ fn run(
         fold_fn: fold_fn,
         fold_const: fold_const,
         fold_enum: fold_enum,
+        fold_res: fold_res,
         fold_modlist: fold_modlist,
         fold_fnlist: fold_fnlist,
         fold_constlist: fold_constlist,
-        fold_enumlist: fold_enumlist
+        fold_enumlist: fold_enumlist,
+        fold_reslist: fold_reslist
         with *fold::default_seq_fold(ctxt)
     });
     fold.fold_crate(fold, doc)
@@ -280,3 +282,66 @@ fn should_not_elide_enums_with_documented_variants() {
     let doc = run(srv, doc);
     assert vec::is_not_empty(*doc.topmod.enums);
 }
+
+fn fold_res(fold: fold::fold<ctxt>, doc: doc::resdoc) -> doc::resdoc {
+    let doc = ~{
+        args: vec::filter_map(doc.args) {|arg|
+            if arg.desc != none {
+                some(arg)
+            } else {
+                none
+            }
+        }
+        with *fold::default_seq_fold_res(fold, doc)
+    };
+    fold.ctxt.have_docs =
+        doc.brief != none
+        || doc.desc != none
+        || vec::is_not_empty(doc.args);
+    ret doc;
+}
+
+fn fold_reslist(
+    fold: fold::fold<ctxt>,
+    list: doc::reslist
+) -> doc::reslist {
+    doc::reslist(vec::filter_map(*list) {|doc|
+        let doc = fold.fold_res(fold, doc);
+        if fold.ctxt.have_docs {
+            some(doc)
+        } else {
+            none
+        }
+    })
+}
+
+#[test]
+fn should_elide_undocumented_resources() {
+    let source = "resource r(a: bool) { }";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let doc = run(srv, doc);
+    assert vec::is_empty(*doc.topmod.resources);
+}
+
+#[test]
+fn should_elide_undocumented_resource_args() {
+    let source = "#[doc = \"drunk\"]\
+                  resource r(a: bool) { }";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let doc = attr_pass::mk_pass()(srv, doc);
+    let doc = run(srv, doc);
+    assert vec::is_empty(doc.topmod.resources[0].args);
+}
+
+#[test]
+fn should_not_elide_resources_with_documented_args() {
+    let source = "#[doc(args(a = \"drunk\"))]\
+                  resource r(a: bool) { }";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let doc = attr_pass::mk_pass()(srv, doc);
+    let doc = run(srv, doc);
+    assert vec::is_not_empty(*doc.topmod.resources);
+}