rustdoc: Add various sorting passes
This commit is contained in:
parent
c976b7c623
commit
a57c15bf88
4 changed files with 71 additions and 1 deletions
|
@ -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;
|
|
@ -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()) }
|
||||
]);
|
||||
}
|
19
src/rustdoc/sort_item_name_pass.rs
Normal file
19
src/rustdoc/sort_item_name_pass.rs
Normal 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";
|
||||
}
|
47
src/rustdoc/sort_item_type_pass.rs
Normal file
47
src/rustdoc/sort_item_type_pass.rs
Normal 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";
|
||||
}
|
Loading…
Reference in a new issue