about summary refs log tree commit diff
diff options
context:
space:
mode:
authorIvan Komarov <Ivan.Komarov@dfyz.info>2018-10-27 04:01:37 +0300
committerIvan Komarov <Ivan.Komarov@dfyz.info>2018-10-28 02:37:55 +0300
commit00a20bceff40e98034a7346e5cc6319cbd2d21b7 (patch)
tree45fedd13dfb41b1187ca3754aca8877c587ca44f
parent8fb1b179bf26e15f8552e24a7600bf605f06c3a5 (diff)
Fix formatting failures on Windows
When newline_style is set to Windows, an empty line inside of a macro
results in `\r` being passed to the `fold()` in `MacroBranch::rewrite()`.

`\r` is technically not an empty string, so we try to indent it, leaving
trailing whitespaces behind, even though that was not intended
(as far as I can see).

This commit replaces the `!l.is_empty()` check with calling
`is_empty_line()`, since trying to indent any whitespace-only string
will probably result in problematic trailing whitespaces.

Fixes: #2810
-rw-r--r--src/macros.rs2
-rw-r--r--tests/target/issue-2810.rs14
2 files changed, 15 insertions, 1 deletions
diff --git a/src/macros.rs b/src/macros.rs
index d378bb8ffb1..43f3071b70a 100644
--- a/src/macros.rs
+++ b/src/macros.rs
@@ -1347,7 +1347,7 @@ impl MacroBranch {
             .fold(
                 (String::new(), true),
                 |(mut s, need_indent), (i, (kind, ref l))| {
-                    if !l.is_empty()
+                    if !is_empty_line(l)
                         && need_indent
                         && !new_body_snippet.is_line_non_formatted(i + 1)
                     {
diff --git a/tests/target/issue-2810.rs b/tests/target/issue-2810.rs
new file mode 100644
index 00000000000..34140c7a1fc
--- /dev/null
+++ b/tests/target/issue-2810.rs
@@ -0,0 +1,14 @@
+// rustfmt-newline_style: Windows
+
+#[macro_export]
+macro_rules! hmmm___ffi_error {
+    ($result:ident) => {
+        pub struct $result {
+            success: bool,
+        }
+
+        impl $result {
+            pub fn foo(self) {}
+        }
+    };
+}