aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Format/WhitespaceManager.cpp
diff options
context:
space:
mode:
authorOwen Pan <owenpiano@gmail.com>2024-04-28 14:06:12 -0700
committerGitHub <noreply@github.com>2024-04-28 14:06:12 -0700
commitaa596fa4d974f75ed8d2db3f4880ec0e5be3e176 (patch)
treee3d6ed11265771c9d5f22a8459d2486a2d424360 /clang/lib/Format/WhitespaceManager.cpp
parent9c1de620344b2518bb171be51066e1ec9a5be623 (diff)
downloadllvm-aa596fa4d974f75ed8d2db3f4880ec0e5be3e176.zip
llvm-aa596fa4d974f75ed8d2db3f4880ec0e5be3e176.tar.gz
llvm-aa596fa4d974f75ed8d2db3f4880ec0e5be3e176.tar.bz2
[clang-format] Set Change.TokenLength to ColumnWidth (#90378)
Fixes #37705. Fixes #47333. Fixes #47624. Fixes #58850. Fixes #75929. Fixes #87885. Fixes #89916.
Diffstat (limited to 'clang/lib/Format/WhitespaceManager.cpp')
-rw-r--r--clang/lib/Format/WhitespaceManager.cpp11
1 files changed, 7 insertions, 4 deletions
diff --git a/clang/lib/Format/WhitespaceManager.cpp b/clang/lib/Format/WhitespaceManager.cpp
index cc9bcce..44fd807 100644
--- a/clang/lib/Format/WhitespaceManager.cpp
+++ b/clang/lib/Format/WhitespaceManager.cpp
@@ -131,6 +131,7 @@ void WhitespaceManager::calculateLineBreakInformation() {
for (unsigned I = 1, e = Changes.size(); I != e; ++I) {
auto &C = Changes[I];
auto &P = Changes[I - 1];
+ auto &PrevTokLength = P.TokenLength;
SourceLocation OriginalWhitespaceStart =
C.OriginalWhitespaceRange.getBegin();
SourceLocation PreviousOriginalWhitespaceEnd =
@@ -169,21 +170,23 @@ void WhitespaceManager::calculateLineBreakInformation() {
// line of the token.
auto NewlinePos = Text.find_first_of('\n');
if (NewlinePos == StringRef::npos) {
- P.TokenLength = OriginalWhitespaceStartOffset -
+ PrevTokLength = OriginalWhitespaceStartOffset -
PreviousOriginalWhitespaceEndOffset +
C.PreviousLinePostfix.size() + P.CurrentLinePrefix.size();
+ if (!P.IsInsideToken)
+ PrevTokLength = std::min(PrevTokLength, P.Tok->ColumnWidth);
} else {
- P.TokenLength = NewlinePos + P.CurrentLinePrefix.size();
+ PrevTokLength = NewlinePos + P.CurrentLinePrefix.size();
}
// If there are multiple changes in this token, sum up all the changes until
// the end of the line.
if (P.IsInsideToken && P.NewlinesBefore == 0)
- LastOutsideTokenChange->TokenLength += P.TokenLength + P.Spaces;
+ LastOutsideTokenChange->TokenLength += PrevTokLength + P.Spaces;
else
LastOutsideTokenChange = &P;
- C.PreviousEndOfTokenColumn = P.StartOfTokenColumn + P.TokenLength;
+ C.PreviousEndOfTokenColumn = P.StartOfTokenColumn + PrevTokLength;
P.IsTrailingComment =
(C.NewlinesBefore > 0 || C.Tok->is(tok::eof) ||