summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Format/ContinuationIndenter.cpp17
-rw-r--r--clang/unittests/Format/FormatTest.cpp8
2 files changed, 17 insertions, 8 deletions
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index 4e1417cf4df..1e10ce34924 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -734,6 +734,7 @@ unsigned ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
llvm::OwningPtr<BreakableToken> Token;
unsigned StartColumn = State.Column - Current.ColumnWidth;
+ unsigned ColumnLimit = getColumnLimit(State);
if (Current.isOneOf(tok::string_literal, tok::wide_string_literal,
tok::utf8_string_literal, tok::utf16_string_literal,
@@ -778,16 +779,17 @@ unsigned ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
(Current.Previous == NULL ||
Current.Previous->Type != TT_ImplicitStringLiteral)) {
Token.reset(new BreakableLineComment(Current, State.Line->Level,
- StartColumn, State.Line->InPPDirective,
+ StartColumn, /*InPPDirective=*/false,
Encoding, Style));
+ // We don't insert backslashes when breaking line comments.
+ ColumnLimit = Style.ColumnLimit;
} else {
return 0;
}
- if (Current.UnbreakableTailLength >= getColumnLimit(State))
+ if (Current.UnbreakableTailLength >= ColumnLimit)
return 0;
- unsigned RemainingSpace =
- getColumnLimit(State) - Current.UnbreakableTailLength;
+ unsigned RemainingSpace = ColumnLimit - Current.UnbreakableTailLength;
bool BreakInserted = false;
unsigned Penalty = 0;
unsigned RemainingTokenColumns = 0;
@@ -800,7 +802,7 @@ unsigned ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
Token->getLineLengthAfterSplit(LineIndex, TailOffset, StringRef::npos);
while (RemainingTokenColumns > RemainingSpace) {
BreakableToken::Split Split =
- Token->getSplit(LineIndex, TailOffset, getColumnLimit(State));
+ Token->getSplit(LineIndex, TailOffset, ColumnLimit);
if (Split.first == StringRef::npos) {
// The last line's penalty is handled in addNextStateToQueue().
if (LineIndex < EndIndex - 1)
@@ -817,9 +819,8 @@ unsigned ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
Penalty += Current.SplitPenalty;
unsigned ColumnsUsed =
Token->getLineLengthAfterSplit(LineIndex, TailOffset, Split.first);
- if (ColumnsUsed > getColumnLimit(State)) {
- Penalty += Style.PenaltyExcessCharacter *
- (ColumnsUsed - getColumnLimit(State));
+ if (ColumnsUsed > ColumnLimit) {
+ Penalty += Style.PenaltyExcessCharacter * (ColumnsUsed - ColumnLimit);
}
TailOffset += Split.first + Split.second;
RemainingTokenColumns = NewRemainingTokenColumns;
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index d02fb3405c7..9f05619bb1d 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -1005,6 +1005,14 @@ TEST_F(FormatTest, SplitsLongCxxComments) {
EXPECT_EQ("//\t aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
format("//\t aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
getLLVMStyleWithColumns(20)));
+ EXPECT_EQ(
+ "#define XXX // a b c d\n"
+ " // e f g h",
+ format("#define XXX // a b c d e f g h", getLLVMStyleWithColumns(22)));
+ EXPECT_EQ(
+ "#define XXX // q w e r\n"
+ " // t y u i",
+ format("#define XXX //q w e r t y u i", getLLVMStyleWithColumns(22)));
}
TEST_F(FormatTest, DontSplitLineCommentsWithEscapedNewlines) {
OpenPOWER on IntegriCloud