diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index c333dc2e3652..2daa77fac57d 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -20,6 +20,12 @@ fn run( doc: doc::cratedoc ) -> doc::cratedoc { let fold = fold::fold({ + fold_crate: fn~( + f: fold::fold, + d: doc::cratedoc + ) -> doc::cratedoc { + fold_crate(f, d) + }, fold_fn: fn~( f: fold::fold, d: doc::fndoc @@ -31,6 +37,38 @@ fn run( fold.fold_crate(fold, doc) } +fn fold_crate( + fold: fold::fold, + doc: doc::cratedoc +) -> doc::cratedoc { + + let srv = fold.ctxt; + let doc = fold::default_seq_fold_crate(fold, doc); + + let attrs = astsrv::exec(srv) {|ctxt| + let attrs = ctxt.ast.node.attrs; + attr_parser::parse_crate(attrs) + }; + + ~{ + topmod: ~{ + name: option::from_maybe(doc.topmod.name, attrs.name), + mods: doc.topmod.mods, + fns: doc.topmod.fns + } + } +} + +#[test] +fn should_replace_top_module_name_with_crate_name() { + let source = "#[link(name = \"bond\")];"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let fold = fold::default_seq_fold(srv); + let doc = fold_crate(fold, doc); + assert doc.topmod.name == "bond"; +} + fn fold_fn( fold: fold::fold, doc: doc::fndoc diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 085d24c9b297..58b0724b29d5 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -1,6 +1,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_fn; export default_seq_fold_fnlist;