about summary refs log tree commit diff
path: root/src/rustdoc
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-23 17:58:40 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-23 17:58:52 -0800
commitef941998bea47c601adbb4af03beda98412aee6d (patch)
tree8a4e68b063285b39b05224aad9579a88a7323b5b /src/rustdoc
parent17ac98ba22011c08289de98e16c84220f031f5eb (diff)
downloadrust-ef941998bea47c601adbb4af03beda98412aee6d.tar.gz
rust-ef941998bea47c601adbb4af03beda98412aee6d.zip
rustdoc: Correctly indent multiline fn signatures
Diffstat (limited to 'src/rustdoc')
-rw-r--r--src/rustdoc/gen.rs36
1 files changed, 32 insertions, 4 deletions
diff --git a/src/rustdoc/gen.rs b/src/rustdoc/gen.rs
index 6cefc553d3c..d0234ad6526 100644
--- a/src/rustdoc/gen.rs
+++ b/src/rustdoc/gen.rs
@@ -117,13 +117,19 @@ fn write_fn(
 fn write_sig(ctxt: ctxt, sig: option<str>) {
     alt sig {
       some(sig) {
-        ctxt.w.write_line(#fmt("    %s", sig));
+        ctxt.w.write_line(code_block_indent(sig));
         ctxt.w.write_line("");
       }
       none { fail "unimplemented" }
     }
 }
 
+fn code_block_indent(s: str) -> str {
+    let lines = str::lines_any(s);
+    let indented = vec::map(lines, { |line| #fmt("    %s", line) });
+    str::connect(indented, "\n")
+}
+
 #[test]
 fn should_write_the_function_signature() {
     let markdown = test::render("#[doc = \"f\"] fn a() { }");
@@ -136,6 +142,23 @@ fn should_insert_blank_line_after_fn_signature() {
     assert str::contains(markdown, "fn a()\n\n");
 }
 
+#[test]
+fn should_correctly_indent_fn_signature() {
+    let doc = test::create_doc("fn a() { }");
+    let doc = ~{
+        topmod: ~{
+            fns: doc::fnlist([~{
+                sig: some("line 1\nline 2")
+                with *doc.topmod.fns[0]
+            }])
+            with *doc.topmod
+        }
+        with *doc
+    };
+    let markdown = test::write_markdown_str(doc);
+    assert str::contains(markdown, "    line 1\n    line 2");
+}
+
 fn write_brief(
     ctxt: ctxt,
     brief: option<str>
@@ -280,6 +303,13 @@ fn should_write_return_description_on_same_line_as_type() {
 #[cfg(test)]
 mod test {
     fn render(source: str) -> str {
+        let doc = create_doc(source);
+        let markdown = write_markdown_str(doc);
+        #debug("markdown: %s", markdown);
+        markdown
+    }
+
+    fn create_doc(source: str) -> doc::cratedoc {
         let srv = astsrv::mk_srv_from_str(source);
         let doc = extract::from_srv(srv, "");
         #debug("doc (extract): %?", doc);
@@ -289,9 +319,7 @@ mod test {
         #debug("doc (path): %?", doc);
         let doc = attr_pass::mk_pass()(srv, doc);
         #debug("doc (attr): %?", doc);
-        let markdown = write_markdown_str(doc);
-        #debug("markdown: %s", markdown);
-        markdown
+        doc
     }
 
     fn write_markdown_str(