diff options
-rw-r--r-- | lib/Format/UnwrappedLineParser.cpp | 7 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 8 |
2 files changed, 12 insertions, 3 deletions
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index d218f88e55..89a391bd19 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -100,7 +100,6 @@ public: Parser.Line.reset(new UnwrappedLine()); Parser.Line->Level = PreBlockLine->Level; Parser.Line->InPPDirective = PreBlockLine->InPPDirective; - Parser.CommentsBeforeNextToken.swap(CommentsBeforeNextToken); } ~ScopedLineState() { @@ -112,7 +111,6 @@ public: Parser.MustBreakBeforeNextToken = true; if (SwitchToPreprocessorLines) Parser.CurrentLines = &Parser.Lines; - Parser.CommentsBeforeNextToken.swap(CommentsBeforeNextToken); } private: @@ -120,7 +118,6 @@ private: const bool SwitchToPreprocessorLines; UnwrappedLine *PreBlockLine; - SmallVector<FormatToken, 1> CommentsBeforeNextToken; }; UnwrappedLineParser::UnwrappedLineParser( @@ -830,6 +827,10 @@ void UnwrappedLineParser::readToken() { bool SwitchToPreprocessorLines = !Line->Tokens.empty() && CurrentLines == &Lines; ScopedLineState BlockState(*this, SwitchToPreprocessorLines); + // Comments stored before the preprocessor directive need to be output + // before the preprocessor directive, at the same level as the + // preprocessor directive, as we consider them to apply to the directive. + flushComments(FormatTok.NewlinesBefore > 0); parsePPDirective(); } if (!FormatTok.Tok.is(tok::comment)) diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 3f26b0a482..92a2363bbd 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -592,6 +592,14 @@ TEST_F(FormatTest, UnderstandsSingleLineComments) { verifyGoogleFormat( "aaaaaaaaaaaaaaaaaaaaaaaaaa(\n" " aaaaaaaaaaaaaaaaaaaaaa); // 81 cols with this comment"); + EXPECT_EQ("D(a, {\n" + " // test\n" + " int a;\n" + "});", + format("D(a, {\n" + "// test\n" + "int a;\n" + "});")); } TEST_F(FormatTest, CanFormatCommentsLocally) { |