[clang] [clang-format] Fix mismatched break in BlockIndent (PR #124998)
Gedare Bloom via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 29 15:04:42 PST 2025
https://github.com/gedare created https://github.com/llvm/llvm-project/pull/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
>From 69658e8c2beb787b90ea29765bf428892d4e5ec4 Mon Sep 17 00:00:00 2001
From: Gedare Bloom <gedare at rtems.org>
Date: Wed, 29 Jan 2025 14:53:10 -0700
Subject: [PATCH] [clang-format] Fix mismatched break in BlockIndent
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
---
clang/lib/Format/ContinuationIndenter.cpp | 7 +++++++
clang/unittests/Format/FormatTest.cpp | 4 ++++
2 files changed, 11 insertions(+)
diff --git a/clang/lib/Format/ContinuationIndenter.cpp b/clang/lib/Format/ContinuationIndenter.cpp
index c311deaa17bb0e..d0a09d305baaf7 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 57f12221cdc7e6..e647c4fff78b0e 100644
--- a/clang/unittests/Format/FormatTest.cpp
+++ b/clang/unittests/Format/FormatTest.cpp
@@ -9608,6 +9608,10 @@ TEST_F(FormatTest, AlignsAfterOpenBracket) {
" \"a aaaaaaa aaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa\"\n"
");",
Style);
+ verifyFormat("aaaaaaaaaaaaaaaaaaaaaaa(\n"
+ " &bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb\n"
+ ");",
+ Style);
Style.ColumnLimit = 60;
verifyFormat("auto lambda =\n"
" [&b](\n"
More information about the cfe-commits
mailing list