aboutsummaryrefslogtreecommitdiff
path: root/lib/Format
diff options
context:
space:
mode:
authorKrasimir Georgiev <krasimir@google.com>2018-08-07 10:23:24 +0000
committerKrasimir Georgiev <krasimir@google.com>2018-08-07 10:23:24 +0000
commitf5bc3f31a2a22c602e0db22f808dd732632710a6 (patch)
treef4a38ed2673fba1f4feed30c7b066630ef6c545f /lib/Format
parentbd905309f7095d6ba1d40b65b8012b181988c013 (diff)
[clang-format] comment reflow: add last line's penalty when ending broken
Summary: This fixes a bug in clang-format where the last line's penalty is not taken into account when its ending is broken. Usually the last line's penalty is handled by addNextStateToQueue, but in cases where the trailing `*/` is put on a newline, the contents of the last line have to be considered for penalizing. Reviewers: mprobst Reviewed By: mprobst Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D50378 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@339123 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Format')
-rw-r--r--lib/Format/ContinuationIndenter.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp
index 7ca588a675..0c20256505 100644
--- a/lib/Format/ContinuationIndenter.cpp
+++ b/lib/Format/ContinuationIndenter.cpp
@@ -1840,7 +1840,8 @@ ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
// No break opportunity - update the penalty and continue with the next
// logical line.
if (LineIndex < EndIndex - 1)
- // The last line's penalty is handled in addNextStateToQueue().
+ // The last line's penalty is handled in addNextStateToQueue() or when
+ // calling replaceWhitespaceAfterLastLine below.
Penalty += Style.PenaltyExcessCharacter *
(ContentStartColumn + RemainingTokenColumns - ColumnLimit);
LLVM_DEBUG(llvm::dbgs() << " No break opportunity.\n");
@@ -2095,6 +2096,12 @@ ContinuationIndenter::breakProtrudingToken(const FormatToken &Current,
Token->getSplitAfterLastLine(TailOffset);
if (SplitAfterLastLine.first != StringRef::npos) {
LLVM_DEBUG(llvm::dbgs() << "Replacing whitespace after last line.\n");
+
+ // We add the last line's penalty here, since that line is going to be split
+ // now.
+ Penalty += Style.PenaltyExcessCharacter *
+ (ContentStartColumn + RemainingTokenColumns - ColumnLimit);
+
if (!DryRun)
Token->replaceWhitespaceAfterLastLine(TailOffset, SplitAfterLastLine,
Whitespaces);