about summary refs log tree commit diff
diff options
context:
space:
mode:
authorErick Tryzelaar <erick.tryzelaar@gmail.com>2016-03-07 10:25:02 -0500
committerErick Tryzelaar <erick.tryzelaar@gmail.com>2016-03-07 10:25:02 -0500
commit0e3334eba95ea66f35db15a73181ba8e22f80586 (patch)
tree1b75457639cdef808089b66fb1cb8461aa793aee
parente079afa00b58f06de8e2a7596073045cd0983b7b (diff)
syntax: Always pretty print a newline after doc comments
Before this patch, code that had a doc comment as the first
line, as in:

```rust
/// Foo
struct Foo;
```

Was pretty printed into:

```rust
///Foostruct Foo;
```

This makes sure that that there is always a trailing newline
after a doc comment.

Closes #31722
-rw-r--r--src/libsyntax/print/pprust.rs3
-rw-r--r--src/test/pretty/top-level-doc-comments.rs20
2 files changed, 22 insertions, 1 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 55c1af44cab..a0acfa3ab4a 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -752,7 +752,8 @@ pub trait PrintState<'a> {
         }
         try!(self.maybe_print_comment(attr.span.lo));
         if attr.node.is_sugared_doc {
-            word(self.writer(), &attr.value_str().unwrap())
+            try!(word(self.writer(), &attr.value_str().unwrap()));
+            hardbreak(self.writer())
         } else {
             match attr.node.style {
                 ast::AttrStyle::Inner => try!(word(self.writer(), "#![")),
diff --git a/src/test/pretty/top-level-doc-comments.rs b/src/test/pretty/top-level-doc-comments.rs
new file mode 100644
index 00000000000..59c7f0fe0de
--- /dev/null
+++ b/src/test/pretty/top-level-doc-comments.rs
@@ -0,0 +1,20 @@
+/// Some doc comment.
+struct X;
+
+// ignore-license
+
+// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://rust-lang.org/COPYRIGHT.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// pp-exact
+
+// Test that rust can properly pretty print a doc comment if it's the first line in a file.  some
+
+fn main() { let x = X; }