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 */