about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-07-18 09:31:53 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-07-18 16:05:17 -0700
commit3ac5b4a86fa37d2b2c17ef5ffdb6e521630ea4ac (patch)
tree0613184ab1f468f2a1b776c1d4c6df4ac15d69db /src/rustdoc
parent1528256fdc26199dd58b390e42e2d0dc53b9703d (diff)
downloadrust-3ac5b4a86fa37d2b2c17ef5ffdb6e521630ea4ac.tar.gz
rust-3ac5b4a86fa37d2b2c17ef5ffdb6e521630ea4ac.zip
syntax: Parse multiple trait refs in a single implementation
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/doc.rs2
-rw-r--r--src/rustdoc/extract.rs2
-rw-r--r--src/rustdoc/markdown_pass.rs16
-rw-r--r--src/rustdoc/tystr_pass.rs18
4 files changed, 20 insertions, 18 deletions
diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs
index efbd9c7cd60..e6c780e6e08 100644
--- a/src/rustdoc/doc.rs
+++ b/src/rustdoc/doc.rs
@@ -110,7 +110,7 @@ type methoddoc = {
 
 type impldoc = {
     item: itemdoc,
-    trait_ty: option<~str>,
+    trait_types: ~[~str],
     self_ty: option<~str>,
     methods: ~[methoddoc]
 };
diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs
index 343c018a312..bdcfb8cc590 100644
--- a/src/rustdoc/extract.rs
+++ b/src/rustdoc/extract.rs
@@ -235,7 +235,7 @@ fn impldoc_from_impl(
 ) -> doc::impldoc {
     {
         item: itemdoc,
-        trait_ty: none,
+        trait_types: ~[],
         self_ty: none,
         methods: do vec::map(methods) |method| {
             {
diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs
index f3962f2a30e..b04210f4d31 100644
--- a/src/rustdoc/markdown_pass.rs
+++ b/src/rustdoc/markdown_pass.rs
@@ -224,14 +224,16 @@ fn header_name(doc: doc::itemtag) -> ~str {
       doc::impltag(doc) {
         assert option::is_some(doc.self_ty);
         let self_ty = option::get(doc.self_ty);
-        alt doc.trait_ty {
-          some(trait_ty) {
-            #fmt("%s of %s for %s", doc.name(), trait_ty, self_ty)
-          }
-          none {
-            #fmt("%s for %s", doc.name(), self_ty)
-          }
+        let mut trait_part = ~"";
+        for doc.trait_types.eachi |i, trait_type| {
+            if i == 0 {
+                trait_part += ~" of ";
+            } else {
+                trait_part += ", ";
+            }
+            trait_part += trait_type;
         }
+        #fmt("%s%s for %s", doc.name(), trait_part, self_ty)
       }
       _ {
         doc.name()
diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs
index b22c7e121c7..774106a6fb4 100644
--- a/src/rustdoc/tystr_pass.rs
+++ b/src/rustdoc/tystr_pass.rs
@@ -230,22 +230,22 @@ fn fold_impl(
 
     let srv = fold.ctxt;
 
-    let (trait_ty, self_ty) = do astsrv::exec(srv) |ctxt| {
+    let (trait_types, self_ty) = do astsrv::exec(srv) |ctxt| {
         alt ctxt.ast_map.get(doc.id()) {
           ast_map::node_item(@{
-            node: ast::item_impl(_, trait_ty, self_ty, _), _
+            node: ast::item_impl(_, trait_types, self_ty, _), _
           }, _) {
-            let trait_ty = option::map(trait_ty, |p| {
+            let trait_types = vec::map(trait_types, |p| {
                 pprust::path_to_str(p.path)
             });
-            (trait_ty, some(pprust::ty_to_str(self_ty)))
+            (trait_types, some(pprust::ty_to_str(self_ty)))
           }
           _ { fail ~"expected impl" }
         }
     };
 
     {
-        trait_ty: trait_ty,
+        trait_types: trait_types,
         self_ty: self_ty,
         methods: merge_methods(fold.ctxt, doc.id(), doc.methods)
         with doc
@@ -253,15 +253,15 @@ fn fold_impl(
 }
 
 #[test]
-fn should_add_impl_trait_ty() {
+fn should_add_impl_trait_types() {
     let doc = test::mk_doc(~"impl i of j for int { fn a<T>() { } }");
-    assert doc.cratemod().impls()[0].trait_ty == some(~"j");
+    assert doc.cratemod().impls()[0].trait_types[0] == ~"j";
 }
 
 #[test]
-fn should_not_add_impl_trait_ty_if_none() {
+fn should_not_add_impl_trait_types_if_none() {
     let doc = test::mk_doc(~"impl i for int { fn a() { } }");
-    assert doc.cratemod().impls()[0].trait_ty == none;
+    assert vec::len(doc.cratemod().impls()[0].trait_types) == 0;
 }
 
 #[test]