rustdoc: Add various sorting passes

This commit is contained in:
Brian Anderson 2012-02-03 12:00:49 -08:00
parent c976b7c623
commit a57c15bf88
4 changed files with 71 additions and 1 deletions

View File

@ -30,4 +30,6 @@ mod unindent_pass;
mod trim_pass;
mod astsrv;
mod demo;
mod sort_pass;
mod sort_pass;
mod sort_item_name_pass;
mod sort_item_type_pass;

View File

@ -106,6 +106,8 @@ fn run(source_file: str) {
desc_to_brief_pass::mk_pass(),
trim_pass::mk_pass(),
unindent_pass::mk_pass(),
sort_item_name_pass::mk_pass(),
sort_item_type_pass::mk_pass(),
markdown_pass::mk_pass {|f| f(std::io:: stdout()) }
]);
}

View File

@ -0,0 +1,19 @@
#[doc = "Sorts items by name"];
export mk_pass;
fn mk_pass() -> pass {
sort_pass::mk_pass { |item1, item2|
str::le(item1.name(), item2.name())
}
}
#[test]
fn test() {
let source = "mod z { } fn y() { }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = mk_pass()(srv, doc);
assert doc.topmod.items[0].name() == "y";
assert doc.topmod.items[1].name() == "z";
}

View File

@ -0,0 +1,47 @@
#[doc = "Sorts items by type"];
export mk_pass;
fn mk_pass() -> pass {
sort_pass::mk_pass { |item1, item2|
fn score(item: doc::itemtag) -> int {
alt item {
doc::consttag(_) { 0 }
doc::tytag(_) { 1 }
doc::enumtag(_) { 2 }
doc::restag(_) { 3 }
doc::ifacetag(_) { 4 }
doc::impltag(_) { 5 }
doc::fntag(_) { 6 }
doc::modtag(_) { 7 }
_ { fail }
}
}
score(item1) <= score(item2)
}
}
#[test]
fn test() {
let source =
"mod imod { } \
const iconst: int = 0; \
fn ifn() { } \
enum ienum { ivar } \
resource ires(a: bool) { } \
iface iiface { fn a(); } \
impl iimpl for int { fn a() { } } \
type itype = int;";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = mk_pass()(srv, doc);
assert doc.topmod.items[0].name() == "iconst";
assert doc.topmod.items[1].name() == "itype";
assert doc.topmod.items[2].name() == "ienum";
assert doc.topmod.items[3].name() == "ires";
assert doc.topmod.items[4].name() == "iiface";
assert doc.topmod.items[5].name() == "iimpl";
assert doc.topmod.items[6].name() == "ifn";
assert doc.topmod.items[7].name() == "imod";
}