]> git.lizzy.rs Git - rust.git/commitdiff
rustdoc: Add mod docs attrs to the doc tree
authorBrian Anderson <banderson@mozilla.com>
Thu, 19 Jan 2012 02:51:04 +0000 (18:51 -0800)
committerBrian Anderson <banderson@mozilla.com>
Thu, 19 Jan 2012 03:59:24 +0000 (19:59 -0800)
src/rustdoc/attr_parser.rs
src/rustdoc/attr_pass.rs
src/rustdoc/fold.rs

index e05d6c627bf66804f0b6d937c1aa0da3ebbcfaa8..3a90669df9079d680e30814241f50f317c45e3cd 100644 (file)
@@ -9,7 +9,7 @@
 import rustc::front::attr;
 import core::tuple;
 
-export crate_attrs, fn_attrs, arg_attrs;
+export crate_attrs, mod_attrs, fn_attrs, arg_attrs;
 export parse_crate, parse_mod, parse_fn;
 
 type crate_attrs = {
index 40953f7aec7f963ad92834271746e1bb7d658bc0..42abc78b4d32ae1a77f6b108ae42d082b8ba0e98 100644 (file)
@@ -26,6 +26,12 @@ fn run(
         ) -> doc::cratedoc {
             fold_crate(f, d)
         },
+        fold_mod: fn~(
+            f: fold::fold<astsrv::srv>,
+            d: doc::moddoc
+        ) -> doc::moddoc {
+            fold_mod(f, d)
+        },
         fold_fn: fn~(
             f: fold::fold<astsrv::srv>,
             d: doc::fndoc
@@ -68,6 +74,56 @@ fn should_replace_top_module_name_with_crate_name() {
     assert doc.topmod.name == "bond";
 }
 
+fn fold_mod(fold: fold::fold<astsrv::srv>, doc: doc::moddoc) -> doc::moddoc {
+    let srv = fold.ctxt;
+    let attrs = if doc.id == ast::crate_node_id {
+        // This is the top-level mod, use the crate attributes
+        astsrv::exec(srv) {|ctxt|
+            attr_parser::parse_mod(ctxt.ast.node.attrs)
+        }
+    } else {
+        astsrv::exec(srv) {|ctxt|
+            let attrs = alt ctxt.map.get(doc.id) {
+              ast_map::node_item(item) { item.attrs }
+            };
+            attr_parser::parse_mod(attrs)
+        }
+    };
+    let doc = fold::default_seq_fold_mod(fold, doc);
+    ret merge_mod_attrs(doc, attrs);
+
+    fn merge_mod_attrs(
+        doc: doc::moddoc,
+        attrs: attr_parser::mod_attrs
+    ) -> doc::moddoc {
+        ~{
+            brief: attrs.brief,
+            desc: attrs.desc
+            with *doc
+        }
+    }
+}
+
+#[test]
+fn fold_mod_should_extract_mod_attributes() {
+    let source = "#[doc = \"test\"] mod a { }";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let fold = fold::default_seq_fold(srv);
+    let doc = fold_mod(fold, doc.topmod.mods[0]);
+    assert doc.desc == some("test");
+}
+
+#[test]
+fn fold_mod_should_extract_top_mod_attributes() {
+    let source = "#[doc = \"test\"];";
+    let srv = astsrv::mk_srv_from_str(source);
+    let doc = extract::from_srv(srv, "");
+    let fold = fold::default_seq_fold(srv);
+    let doc = fold_mod(fold, doc.topmod);
+    assert doc.desc == some("test");
+}
+
 fn fold_fn(
     fold: fold::fold<astsrv::srv>,
     doc: doc::fndoc
index da6a4d35c3e9092a779e3c99a20d9e1160f3f3e5..7b52881414cb85cc04db9d696d2902ad910b2d6b 100644 (file)
@@ -2,6 +2,7 @@
 export fold_crate, fold_mod, fold_fn, fold_modlist, fold_fnlist;
 export default_seq_fold;
 export default_seq_fold_crate;
+export default_seq_fold_mod;
 export default_seq_fold_fn;
 export default_seq_fold_fnlist;