[clang] b873479 - [clang-format] Fix mismatched break in BlockIndent (#124998)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Jan 30 19:38:46 PST 2025
Author: Gedare Bloom
Date: 2025-01-30T19:38:43-08:00
New Revision: b8734797a3f605c4aaa37fcb5007baa273565460
URL: https://github.com/llvm/llvm-project/commit/b8734797a3f605c4aaa37fcb5007baa273565460
DIFF: https://github.com/llvm/llvm-project/commit/b8734797a3f605c4aaa37fcb5007baa273565460.diff
LOG: [clang-format] Fix mismatched break in BlockIndent (#124998)
Near the ColumnLimit a break could be inserted before a right parens
with BlockIndent without a break after the matching left parens. Avoid
these hanging right parens by disallowing breaks before right parens
unless there was a break after the left parens.
Fixes #103306
Added:
Modified:
clang/lib/Format/ContinuationIndenter.cpp
clang/unittests/Format/FormatTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index c311deaa17bb0e..6f7d213c0b5599 100644
--- a/clang/lib/Format/ContinuationIndenter.cpp
+++ b/clang/lib/Format/ContinuationIndenter.cpp
@@ -349,6 +349,13 @@ bool ContinuationIndenter::canBreak(const LineState &State) {
}
}
+ // Allow breaking before the right parens with block indentation if there was
+ // a break after the left parens, which is tracked by BreakBeforeClosingParen.
+ if (Style.AlignAfterOpenBracket == FormatStyle::BAS_BlockIndent &&
+ Current.is(tok::r_paren)) {
+ return CurrentState.BreakBeforeClosingParen;
+ }
+
// Don't allow breaking before a closing brace of a block-indented braced list
// initializer if there isn't already a break.
if (Current.is(tok::r_brace) && Current.MatchingParen &&
diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp
index 30f3533ac73f72..253e50437c23a9 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -9614,6 +9614,10 @@ TEST_F(FormatTest, AlignsAfterOpenBracket) {
" auto aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
" ) {};",
Style);
+ verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
+ ");",
+ Style);
}
TEST_F(FormatTest, ParenthesesAndOperandAlignment) {
More information about the cfe-commits
mailing list