diff options
-rw-r--r-- | lib/Format/Format.cpp | 10 | ||||
-rw-r--r-- | lib/Format/UnwrappedLineParser.cpp | 11 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 4 |
3 files changed, 21 insertions, 4 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index bb7e0fa7e5..a3c5e503b9 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1132,7 +1132,15 @@ public: IndentForLevel.resize(TheLine.Level + 1); bool WasMoved = PreviousLineWasTouched && TheLine.First.FormatTok.NewlinesBefore == 0; - if (TheLine.Type != LT_Invalid && (WasMoved || touchesRanges(TheLine))) { + if (TheLine.First.is(tok::eof)) { + if (PreviousLineWasTouched) { + unsigned NewLines = + std::min(TheLine.First.FormatTok.NewlinesBefore, 1u); + Whitespaces.replaceWhitespace(TheLine.First, NewLines, /*Indent*/ 0, + /*WhitespaceStartColumn*/ 0, Style); + } + } else if (TheLine.Type != LT_Invalid && + (WasMoved || touchesRanges(TheLine))) { unsigned LevelIndent = getIndent(IndentForLevel, TheLine.Level); unsigned Indent = LevelIndent; if (static_cast<int>(Indent) + Offset >= 0) diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 28522a3e32..cdd77759fd 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -138,6 +138,11 @@ bool UnwrappedLineParser::parse() { I != E; ++I) { Callback.consumeUnwrappedLine(*I); } + + // Create line with eof token. + pushToken(FormatTok); + Callback.consumeUnwrappedLine(*Line); + return Error; } @@ -776,14 +781,14 @@ void UnwrappedLineParser::addUnwrappedLine() { CurrentLines->push_back(*Line); Line->Tokens.clear(); if (CurrentLines == &Lines && !PreprocessorDirectives.empty()) { - for (std::vector<UnwrappedLine>::iterator I = PreprocessorDirectives - .begin(), E = PreprocessorDirectives.end(); + for (std::vector<UnwrappedLine>::iterator + I = PreprocessorDirectives.begin(), + E = PreprocessorDirectives.end(); I != E; ++I) { CurrentLines->push_back(*I); } PreprocessorDirectives.clear(); } - } bool UnwrappedLineParser::eof() const { diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 64de86a926..8cedfcedfd 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -166,6 +166,10 @@ TEST_F(FormatTest, OnlyGeneratesNecessaryReplacements) { TEST_F(FormatTest, RemovesTrailingWhitespaceOfFormattedLine) { EXPECT_EQ("int a;\nint b;", format("int a; \nint b;", 0, 0, getLLVMStyle())); + EXPECT_EQ("int a;", format("int a; ")); + EXPECT_EQ("int a;\n", format("int a; \n \n \n ")); + EXPECT_EQ("int a;\nint b; ", + format("int a; \nint b; ", 0, 0, getLLVMStyle())); } TEST_F(FormatTest, ReformatsMovedLines) { |