diff --git a/src/imports.rs b/src/imports.rs
index b940dcc9de7..c49a95b6ff7 100644
--- a/src/imports.rs
+++ b/src/imports.rs
@@ -314,11 +314,14 @@ impl<'a> FmtVisitor<'a> {
             Some(ref s) if s.is_empty() => {
                 // Format up to last newline
                 let prev_span = mk_sp(self.last_pos, source!(self, span).lo());
-                let span_end = match self.snippet(prev_span).rfind('\n') {
-                    Some(offset) => self.last_pos + BytePos(offset as u32),
-                    None => source!(self, span).lo(),
-                };
+                let trimmed_snippet = self.snippet(prev_span).trim_right();
+                let span_end = self.last_pos + BytePos(trimmed_snippet.len() as u32);
                 self.format_missing(span_end);
+                // We have an excessive newline from the removed import.
+                if self.buffer.ends_with('\n') {
+                    self.buffer.pop();
+                    self.line_number -= 1;
+                }
                 self.last_pos = source!(self, span).hi();
             }
             Some(ref s) => {
diff --git a/tests/source/issue-2256.rs b/tests/source/issue-2256.rs
new file mode 100644
index 00000000000..b505b96e2b3
--- /dev/null
+++ b/tests/source/issue-2256.rs
@@ -0,0 +1,12 @@
+// こんにちは
+use std::{};
+use std::borrow::Cow;
+
+/* comment */ use std::{};
+/* comment */ use std::{};
+
+
+
+
+
+/* comment */ use std::{};
diff --git a/tests/target/issue-2256.rs b/tests/target/issue-2256.rs
new file mode 100644
index 00000000000..4b546223f94
--- /dev/null
+++ b/tests/target/issue-2256.rs
@@ -0,0 +1,7 @@
+// こんにちは
+use std::borrow::Cow;
+
+/* comment */
+/* comment */
+
+/* comment */