From e8694589143830f1eff367016a3bb72c124345a5 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Tue, 24 Jan 2012 21:16:01 -0800 Subject: [PATCH] rustdoc: Extract a general apply-function-to-strings pass from trim_pass --- src/rustdoc/desc_pass.rs | 70 ++++++++++++++++++++++++++++++++++++++ src/rustdoc/rustdoc.rc | 1 + src/rustdoc/trim_pass.rs | 72 ++++------------------------------------ 3 files changed, 78 insertions(+), 65 deletions(-) create mode 100644 src/rustdoc/desc_pass.rs diff --git a/src/rustdoc/desc_pass.rs b/src/rustdoc/desc_pass.rs new file mode 100644 index 0000000000000..6fdf00f7176fe --- /dev/null +++ b/src/rustdoc/desc_pass.rs @@ -0,0 +1,70 @@ +#[doc = "Generic pass for performing an operation on all descriptions"]; + +export mk_pass; + +fn mk_pass(op: fn~(str) -> str) -> pass { + fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc { + run(srv, doc, op) + } +} + +type op = fn~(str) -> str; + +fn run( + _srv: astsrv::srv, + doc: doc::cratedoc, + op: op +) -> doc::cratedoc { + let fold = fold::fold({ + fold_mod: fold_mod, + fold_const: fold_const, + fold_fn: fold_fn + with *fold::default_seq_fold(op) + }); + fold.fold_crate(fold, doc) +} + +fn maybe_apply_op(op: op, s: option) -> option { + option::map(s) {|s| op(s) } +} + +fn fold_mod(fold: fold::fold, doc: doc::moddoc) -> doc::moddoc { + let doc = fold::default_seq_fold_mod(fold, doc); + + ~{ + brief: maybe_apply_op(fold.ctxt, doc.brief), + desc: maybe_apply_op(fold.ctxt, doc.desc) + with *doc + } +} + +fn fold_const(fold: fold::fold, doc: doc::constdoc) -> doc::constdoc { + let doc = fold::default_seq_fold_const(fold, doc); + + ~{ + brief: maybe_apply_op(fold.ctxt, doc.brief), + desc: maybe_apply_op(fold.ctxt, doc.desc) + with *doc + } +} + +fn fold_fn(fold: fold::fold, doc: doc::fndoc) -> doc::fndoc { + let doc = fold::default_seq_fold_fn(fold, doc); + + ~{ + brief: maybe_apply_op(fold.ctxt, doc.brief), + desc: maybe_apply_op(fold.ctxt, doc.desc), + args: vec::map(doc.args) {|doc| + ~{ + desc: maybe_apply_op(fold.ctxt, doc.desc) + with *doc + } + }, + return: { + desc: maybe_apply_op(fold.ctxt, doc.return.desc) + with doc.return + }, + failure: maybe_apply_op(fold.ctxt, doc.failure) + with *doc + } +} diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc index 965b26ecd4953..15083e569b916 100644 --- a/src/rustdoc/rustdoc.rc +++ b/src/rustdoc/rustdoc.rc @@ -24,6 +24,7 @@ mod tystr_pass; mod prune_undoc_pass; mod prune_unexported_pass; mod desc_to_brief_pass; +mod desc_pass; mod trim_pass; mod astsrv; mod demo; diff --git a/src/rustdoc/trim_pass.rs b/src/rustdoc/trim_pass.rs index 1d2569d0d2aa0..871605e555473 100644 --- a/src/rustdoc/trim_pass.rs +++ b/src/rustdoc/trim_pass.rs @@ -10,34 +10,7 @@ is interpreted as the brief description. export mk_pass; fn mk_pass() -> pass { - run -} - -fn run( - _srv: astsrv::srv, - doc: doc::cratedoc -) -> doc::cratedoc { - let fold = fold::fold({ - fold_mod: fold_mod, - fold_const: fold_const, - fold_fn: fold_fn - with *fold::default_seq_fold(()) - }); - fold.fold_crate(fold, doc) -} - -fn trimopt(s: option) -> option { - option::map(s, {|s| str::trim(s) }) -} - -fn fold_mod(fold: fold::fold<()>, doc: doc::moddoc) -> doc::moddoc { - let doc = fold::default_seq_fold_mod(fold, doc); - - ~{ - brief: trimopt(doc.brief), - desc: trimopt(doc.desc) - with *doc - } + desc_pass::mk_pass(str::trim) } #[test] @@ -48,21 +21,11 @@ fn should_trim_mod() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.mods[0].brief == some("brief"); assert doc.topmod.mods[0].desc == some("desc"); } -fn fold_const(fold: fold::fold<()>, doc: doc::constdoc) -> doc::constdoc { - let doc = fold::default_seq_fold_const(fold, doc); - - ~{ - brief: trimopt(doc.brief), - desc: trimopt(doc.desc) - with *doc - } -} - #[test] fn should_trim_const() { let source = "#[doc(brief = \"\nbrief\n\", \ @@ -71,32 +34,11 @@ fn should_trim_const() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.consts[0].brief == some("brief"); assert doc.topmod.consts[0].desc == some("desc"); } -fn fold_fn(fold: fold::fold<()>, doc: doc::fndoc) -> doc::fndoc { - let doc = fold::default_seq_fold_fn(fold, doc); - - ~{ - brief: trimopt(doc.brief), - desc: trimopt(doc.desc), - args: vec::map(doc.args) {|doc| - ~{ - desc: trimopt(doc.desc) - with *doc - } - }, - return: { - desc: trimopt(doc.return.desc) - with doc.return - }, - failure: trimopt(doc.failure) - with *doc - } -} - #[test] fn should_trim_fn() { let source = "#[doc(brief = \"\nbrief\n\", \ @@ -105,7 +47,7 @@ fn should_trim_fn() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.fns[0].brief == some("brief"); assert doc.topmod.fns[0].desc == some("desc"); } @@ -116,7 +58,7 @@ fn should_trim_args() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.fns[0].args[0].desc == some("a"); } @@ -126,7 +68,7 @@ fn should_trim_ret() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.fns[0].return.desc == some("a"); } @@ -136,6 +78,6 @@ fn should_trim_failure_conditions() { 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); + let doc = mk_pass()(srv, doc); assert doc.topmod.fns[0].failure == some("a"); } \ No newline at end of file