From 447f1fd4af4214086edc4aad5e8fbd483b8f3b35 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Mon, 16 Jan 2012 18:08:17 -0800 Subject: [PATCH] rustdoc: Add a pass type and a run_passes function --- src/rustdoc/rustdoc.rs | 47 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs index 956c2d1319a3..1c55b1a38ec2 100755 --- a/src/rustdoc/rustdoc.rs +++ b/src/rustdoc/rustdoc.rs @@ -5,6 +5,53 @@ use std; use rustc; +type pass = fn~(srv: astsrv::seq_srv, doc: doc::cratedoc) -> doc::cratedoc; + +fn run_passes( + srv: astsrv::seq_srv, + doc: doc::cratedoc, + passes: [pass] +) -> doc::cratedoc { + vec::foldl(doc, passes) {|doc, pass| + pass(srv, doc) + } +} + +#[test] +fn test_run_passes() { + import astsrv::seq_srv; + fn pass1( + _srv: astsrv::seq_srv, + doc: doc::cratedoc + ) -> doc::cratedoc { + ~{ + topmod: ~{ + name: doc.topmod.name + "two", + mods: doc::modlist([]), + fns: doc::fnlist([]) + } + } + } + fn pass2( + _srv: astsrv::seq_srv, + doc: doc::cratedoc + ) -> doc::cratedoc { + ~{ + topmod: ~{ + name: doc.topmod.name + "three", + mods: doc::modlist([]), + fns: doc::fnlist([]) + } + } + } + let source = ""; + let srv = astsrv::mk_seq_srv_from_str(source); + let passes = [pass1, pass2]; + let doc = extract::from_srv(srv, "one"); + let doc = run_passes(srv, doc, passes); + assert doc.topmod.name == "onetwothree"; +} + #[doc( brief = "Main function.", desc = "Command-line arguments: