about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-31 15:28:09 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-31 19:32:27 -0800
commitacb11f47dc7b7fb03caeee5ade2c7002cb20cb6f (patch)
treeb0f28e25e78ce7463404cd9bf7dd3a381692a82b /src/rustdoc
parent56db37d4c7fea8085f80783d1f3dc3204fcfc0b6 (diff)
downloadrust-acb11f47dc7b7fb03caeee5ade2c7002cb20cb6f.tar.gz
rust-acb11f47dc7b7fb03caeee5ade2c7002cb20cb6f.zip
rustdoc: Add impl doc node
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/doc.rs23
-rw-r--r--src/rustdoc/fold.rs24
-rw-r--r--src/rustdoc/markdown_pass.rs1
3 files changed, 43 insertions, 5 deletions
diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs
index 13c618c685b..3a960d294c1 100644
--- a/src/rustdoc/doc.rs
+++ b/src/rustdoc/doc.rs
@@ -12,7 +12,8 @@ enum itemtag {
     fntag(fndoc),
     enumtag(enumdoc),
     restag(resdoc),
-    ifacetag(ifacedoc)
+    ifacetag(ifacedoc),
+    impltag(impldoc)
 }
 
 type moddoc = {
@@ -96,6 +97,16 @@ type methoddoc = {
     sig: option<str>
 };
 
+type impldoc = {
+    id: ast_id,
+    name: str,
+    brief: option<str>,
+    desc: option<str>,
+    iface_ty: option<str>,
+    for_ty: option<str>,
+    methods: [methoddoc]
+};
+
 #[doc = "Some helper methods on moddoc, mostly for testing"]
 impl util for moddoc {
 
@@ -152,6 +163,15 @@ impl util for moddoc {
             }
         }
     }
+
+    fn impls() -> [impldoc] {
+        vec::filter_map(*self.items) {|itemtag|
+            alt itemtag {
+              impltag(impldoc) { some(impldoc) }
+              _ { none }
+            }
+        }
+    }
 }
 
 #[doc = "Helper methods on itemtag"]
@@ -164,6 +184,7 @@ impl util for itemtag {
           doc::enumtag({name, _}) { name }
           doc::restag({name, _}) { name }
           doc::ifacetag({name, _}) { name }
+          _ { fail }
         }
     }
 }
diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs
index 6851299db87..ba5283bd6ff 100644
--- a/src/rustdoc/fold.rs
+++ b/src/rustdoc/fold.rs
@@ -11,6 +11,7 @@ export default_seq_fold_const;
 export default_seq_fold_enum;
 export default_seq_fold_res;
 export default_seq_fold_iface;
+export default_seq_fold_impl;
 
 enum fold<T> = t<T>;
 
@@ -21,6 +22,7 @@ type fold_const<T> = fn~(fold: fold<T>, doc: doc::constdoc) -> doc::constdoc;
 type fold_enum<T> = fn~(fold: fold<T>, doc: doc::enumdoc) -> doc::enumdoc;
 type fold_res<T> = fn~(fold: fold<T>, doc: doc::resdoc) -> doc::resdoc;
 type fold_iface<T> = fn~(fold: fold<T>, doc: doc::ifacedoc) -> doc::ifacedoc;
+type fold_impl<T> = fn~(fold: fold<T>, doc: doc::impldoc) -> doc::impldoc;
 
 type t<T> = {
     ctxt: T,
@@ -30,7 +32,8 @@ type t<T> = {
     fold_const: fold_const<T>,
     fold_enum: fold_enum<T>,
     fold_res: fold_res<T>,
-    fold_iface: fold_iface<T>
+    fold_iface: fold_iface<T>,
+    fold_impl: fold_impl<T>
 };
 
 
@@ -44,7 +47,8 @@ fn mk_fold<T:copy>(
     fold_const: fold_const<T>,
     fold_enum: fold_enum<T>,
     fold_res: fold_res<T>,
-    fold_iface: fold_iface<T>
+    fold_iface: fold_iface<T>,
+    fold_impl: fold_impl<T>
 ) -> fold<T> {
     fold({
         ctxt: ctxt,
@@ -54,7 +58,8 @@ fn mk_fold<T:copy>(
         fold_const: fold_const,
         fold_enum: fold_enum,
         fold_res: fold_res,
-        fold_iface: fold_iface
+        fold_iface: fold_iface,
+        fold_impl: fold_impl
     })
 }
 
@@ -67,7 +72,8 @@ fn default_seq_fold<T:copy>(ctxt: T) -> fold<T> {
         {|f, d| default_seq_fold_const(f, d)},
         {|f, d| default_seq_fold_enum(f, d)},
         {|f, d| default_seq_fold_res(f, d)},
-        {|f, d| default_seq_fold_iface(f, d)}
+        {|f, d| default_seq_fold_iface(f, d)},
+        {|f, d| default_seq_fold_impl(f, d)}
     )
 }
 
@@ -105,6 +111,9 @@ fn default_seq_fold_mod<T>(
               doc::ifacetag(ifacedoc) {
                 doc::ifacetag(fold.fold_iface(fold, ifacedoc))
               }
+              doc::impltag(impldoc) {
+                doc::impltag(fold.fold_impl(fold, impldoc))
+              }
             }
         }
         with doc
@@ -146,6 +155,13 @@ fn default_seq_fold_iface<T>(
     doc
 }
 
+fn default_seq_fold_impl<T>(
+    _fold: fold<T>,
+    doc: doc::impldoc
+) -> doc::impldoc {
+    doc
+}
+
 #[test]
 fn default_fold_should_produce_same_doc() {
     let source = "mod a { fn b() { } mod c { fn d() { } } }";
diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs
index 0833b5c7e74..a231e6eed80 100644
--- a/src/rustdoc/markdown_pass.rs
+++ b/src/rustdoc/markdown_pass.rs
@@ -138,6 +138,7 @@ fn write_mod_contents(
           doc::enumtag(enumdoc) { write_enum(ctxt, enumdoc) }
           doc::restag(resdoc) { write_res(ctxt, resdoc) }
           doc::ifacetag(ifacedoc) { write_iface(ctxt, ifacedoc) }
+          doc::impltag(impldoc) { fail }
         }
     }
 }