Author: alexfh Date: Mon Jul 1 08:42:42 2013 New Revision: 185337 URL: http://llvm.org/viewvc/llvm-project?rev=185337&view=rev Log: Avoid column limit violation in block comments in certain cases.
Summary: Add penalty when an excessively long line in a block comment can not be broken on a leading whitespace. Lack of this addition can lead to severe column width violations when they can be easily avoided. Reviewers: djasper Reviewed By: djasper CC: cfe-commits, klimek Differential Revision: http://llvm-reviews.chandlerc.com/D1071 Modified: cfe/trunk/lib/Format/Format.cpp cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=185337&r1=185336&r2=185337&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Mon Jul 1 08:42:42 2013 @@ -806,9 +806,10 @@ private: /// /// \returns An extra penalty if a token was broken, otherwise 0. /// - /// Note that the penalty of the token protruding the allowed line length is - /// already handled in \c addNextStateToQueue; the returned penalty will only - /// cover the cost of the additional line breaks. + /// The returned penalty will cover the cost of the additional line breaks and + /// column limit violation in all lines except for the last one. The penalty + /// for the column limit violation in the last line (and in single line + /// tokens) is handled in \c addNextStateToQueue. unsigned breakProtrudingToken(const FormatToken &Current, LineState &State, bool DryRun) { llvm::OwningPtr<BreakableToken> Token; @@ -854,8 +855,13 @@ private: while (RemainingTokenColumns > RemainingSpace) { BreakableToken::Split Split = Token->getSplit(LineIndex, TailOffset, getColumnLimit()); - if (Split.first == StringRef::npos) + if (Split.first == StringRef::npos) { + // The last line's penalty is handled in addNextStateToQueue(). + if (LineIndex < EndIndex - 1) + Penalty += Style.PenaltyExcessCharacter * + (RemainingTokenColumns - RemainingSpace); break; + } assert(Split.first != 0); unsigned NewRemainingTokenColumns = Token->getLineLengthAfterSplit( LineIndex, TailOffset + Split.first + Split.second, Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=185337&r1=185336&r2=185337&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Mon Jul 1 08:42:42 2013 @@ -844,6 +844,23 @@ TEST_F(FormatTest, CorrectlyHandlesLengt " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */", format("double *x; /* aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */")); + EXPECT_EQ( + "void ffffffffffff(\n" + " int aaaaaaaa, int bbbbbbbb,\n" + " int cccccccccccc) { /*\n" + " aaaaaaaaaa\n" + " aaaaaaaaaaaaa\n" + " bbbbbbbbbbbbbb\n" + " bbbbbbbbbb\n" + " */\n" + "}", + format("void ffffffffffff(int aaaaaaaa, int bbbbbbbb, int cccccccccccc)\n" + "{ /*\n" + " aaaaaaaaaa aaaaaaaaaaaaa\n" + " bbbbbbbbbbbbbb bbbbbbbbbb\n" + " */\n" + "}", + getLLVMStyleWithColumns(40))); } TEST_F(FormatTest, SplitsLongCxxComments) { _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
