diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-01-18 18:51:04 -0800 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-01-18 19:59:24 -0800 |
| commit | 20b8509594a8acd5dd68d7acb6da94029deed7fb (patch) | |
| tree | a8f8f27b1092b3ff536155ebe70801ad18139392 /src/rustdoc | |
| parent | e39e34776e97073e3ef6f2ef4c226e73ba701fe7 (diff) | |
| download | rust-20b8509594a8acd5dd68d7acb6da94029deed7fb.tar.gz rust-20b8509594a8acd5dd68d7acb6da94029deed7fb.zip | |
rustdoc: Add mod docs attrs to the doc tree
Diffstat (limited to 'src/rustdoc')
| -rw-r--r-- | src/rustdoc/attr_parser.rs | 2 | ||||
| -rw-r--r-- | src/rustdoc/attr_pass.rs | 56 | ||||
| -rw-r--r-- | src/rustdoc/fold.rs | 1 |
3 files changed, 58 insertions, 1 deletions
diff --git a/src/rustdoc/attr_parser.rs b/src/rustdoc/attr_parser.rs index e05d6c627bf..3a90669df90 100644 --- a/src/rustdoc/attr_parser.rs +++ b/src/rustdoc/attr_parser.rs @@ -9,7 +9,7 @@ import rustc::syntax::ast; 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 = { diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index 40953f7aec7..42abc78b4d3 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -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 diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index da6a4d35c3e..7b52881414c 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -2,6 +2,7 @@ export fold; 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; |
