about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-03 12:00:49 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-03 12:00:49 -0800
commita57c15bf88cfa8a684947af5d28c8154ef2f6456 (patch)
tree1a83590cb7a6d811c0b7ca6f0d257e2713d40ae5 /src
parentc976b7c623e242ab2400d3c641cb082c814690fe (diff)
downloadrust-a57c15bf88cfa8a684947af5d28c8154ef2f6456.tar.gz
rust-a57c15bf88cfa8a684947af5d28c8154ef2f6456.zip
rustdoc: Add various sorting passes
Diffstat (limited to 'src')
-rw-r--r--src/rustdoc/rustdoc.rc4
-rwxr-xr-xsrc/rustdoc/rustdoc.rs2
-rw-r--r--src/rustdoc/sort_item_name_pass.rs19
-rw-r--r--src/rustdoc/sort_item_type_pass.rs47
4 files changed, 71 insertions, 1 deletions
diff --git a/src/rustdoc/rustdoc.rc b/src/rustdoc/rustdoc.rc
index a8669237368..036a2190657 100644
--- a/src/rustdoc/rustdoc.rc
+++ b/src/rustdoc/rustdoc.rc
@@ -30,4 +30,6 @@ mod unindent_pass;
 mod trim_pass;
 mod astsrv;
 mod demo;
-mod sort_pass;
\ No newline at end of file
+mod sort_pass;
+mod sort_item_name_pass;
+mod sort_item_type_pass;
\ No newline at end of file
diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs
index e117222aedf..eb210d2f4ac 100755
--- a/src/rustdoc/rustdoc.rs
+++ b/src/rustdoc/rustdoc.rs
@@ -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()) }
     ]);
 }
\ No newline at end of file
diff --git a/src/rustdoc/sort_item_name_pass.rs b/src/rustdoc/sort_item_name_pass.rs
new file mode 100644
index 00000000000..be0478f3302
--- /dev/null
+++ b/src/rustdoc/sort_item_name_pass.rs
@@ -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";
+}
diff --git a/src/rustdoc/sort_item_type_pass.rs b/src/rustdoc/sort_item_type_pass.rs
new file mode 100644
index 00000000000..af6212c24dd
--- /dev/null
+++ b/src/rustdoc/sort_item_type_pass.rs
@@ -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";
+}