[clang] be11e2b - [clang-format] Fix nested parsing of AlignAfterOpenBracket (#192283)
via cfe-commits
cfe-commits at lists.llvm.org
Fri May 1 12:37:26 PDT 2026
Author: Gedare Bloom
Date: 2026-05-01T21:37:21+02:00
New Revision: be11e2b3d25b31dfe29c5ba00a5d76b35915bf26
URL: https://github.com/llvm/llvm-project/commit/be11e2b3d25b31dfe29c5ba00a5d76b35915bf26
DIFF: https://github.com/llvm/llvm-project/commit/be11e2b3d25b31dfe29c5ba00a5d76b35915bf26.diff
LOG: [clang-format] Fix nested parsing of AlignAfterOpenBracket (#192283)
When parsing AlignAfterOpenBracket a default backward compatibility
option is always used even if an inherited style option was set. Avoid
using the default setting unless one of the backward compatible enum
type options is found.
Fixes #183845
Fixes #190758
Added:
Modified:
clang/lib/Format/Format.cpp
clang/unittests/Format/ConfigParseTest.cpp
Removed:
################################################################################
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp
index 8d447177a18a7..2147a812e27c1 100644
--- a/clang/lib/Format/Format.cpp
+++ b/clang/lib/Format/Format.cpp
@@ -39,7 +39,8 @@ enum BracketAlignmentStyle : int8_t {
BAS_Align,
BAS_DontAlign,
BAS_AlwaysBreak,
- BAS_BlockIndent
+ BAS_BlockIndent,
+ BAS_Ignore
};
namespace llvm {
@@ -1109,7 +1110,7 @@ template <> struct MappingTraits<FormatStyle> {
IO.mapOptional("AlignAfterOpenBracket", Style.AlignAfterOpenBracket);
} else {
// For backward compatibility.
- BracketAlignmentStyle LocalBAS = BAS_Align;
+ BracketAlignmentStyle LocalBAS = BAS_Ignore;
if (IsGoogleOrChromium) {
FormatStyle::LanguageKind Language = Style.Language;
if (Language == FormatStyle::LK_None)
@@ -1122,33 +1123,61 @@ template <> struct MappingTraits<FormatStyle> {
LocalBAS = BAS_DontAlign;
}
IO.mapOptional("AlignAfterOpenBracket", LocalBAS);
- Style.BreakAfterOpenBracketBracedList = false;
- Style.BreakAfterOpenBracketFunction = false;
- Style.BreakAfterOpenBracketIf = false;
- Style.BreakAfterOpenBracketLoop = false;
- Style.BreakAfterOpenBracketSwitch = false;
- Style.BreakBeforeCloseBracketBracedList = false;
- Style.BreakBeforeCloseBracketFunction = false;
- Style.BreakBeforeCloseBracketIf = false;
- Style.BreakBeforeCloseBracketLoop = false;
- Style.BreakBeforeCloseBracketSwitch = false;
switch (LocalBAS) {
case BAS_DontAlign:
Style.AlignAfterOpenBracket = false;
+ Style.BreakAfterOpenBracketBracedList = false;
+ Style.BreakAfterOpenBracketFunction = false;
+ Style.BreakAfterOpenBracketIf = false;
+ Style.BreakAfterOpenBracketLoop = false;
+ Style.BreakAfterOpenBracketSwitch = false;
+ Style.BreakBeforeCloseBracketBracedList = false;
+ Style.BreakBeforeCloseBracketFunction = false;
+ Style.BreakBeforeCloseBracketIf = false;
+ Style.BreakBeforeCloseBracketLoop = false;
+ Style.BreakBeforeCloseBracketSwitch = false;
break;
case BAS_BlockIndent:
+ Style.AlignAfterOpenBracket = true;
Style.BreakBeforeCloseBracketBracedList = true;
Style.BreakBeforeCloseBracketFunction = true;
Style.BreakBeforeCloseBracketIf = true;
- [[fallthrough]];
+ Style.BreakAfterOpenBracketLoop = false;
+ Style.BreakAfterOpenBracketSwitch = false;
+ Style.BreakBeforeCloseBracketBracedList = false;
+ Style.BreakBeforeCloseBracketFunction = false;
+ Style.BreakBeforeCloseBracketIf = false;
+ Style.BreakBeforeCloseBracketLoop = false;
+ Style.BreakBeforeCloseBracketSwitch = false;
+ break;
case BAS_AlwaysBreak:
+ Style.AlignAfterOpenBracket = true;
Style.BreakAfterOpenBracketBracedList = true;
Style.BreakAfterOpenBracketFunction = true;
Style.BreakAfterOpenBracketIf = true;
- [[fallthrough]];
+ Style.BreakAfterOpenBracketLoop = false;
+ Style.BreakAfterOpenBracketSwitch = false;
+ Style.BreakBeforeCloseBracketBracedList = false;
+ Style.BreakBeforeCloseBracketFunction = false;
+ Style.BreakBeforeCloseBracketIf = false;
+ Style.BreakBeforeCloseBracketLoop = false;
+ Style.BreakBeforeCloseBracketSwitch = false;
+ break;
case BAS_Align:
Style.AlignAfterOpenBracket = true;
+ Style.BreakAfterOpenBracketBracedList = false;
+ Style.BreakAfterOpenBracketFunction = false;
+ Style.BreakAfterOpenBracketIf = false;
+ Style.BreakAfterOpenBracketLoop = false;
+ Style.BreakAfterOpenBracketSwitch = false;
+ Style.BreakBeforeCloseBracketBracedList = false;
+ Style.BreakBeforeCloseBracketFunction = false;
+ Style.BreakBeforeCloseBracketIf = false;
+ Style.BreakBeforeCloseBracketLoop = false;
+ Style.BreakBeforeCloseBracketSwitch = false;
+ break;
+ case BAS_Ignore:
break;
}
}
diff --git a/clang/unittests/Format/ConfigParseTest.cpp b/clang/unittests/Format/ConfigParseTest.cpp
index 498e44b190ef2..64b0e8702872c 100644
--- a/clang/unittests/Format/ConfigParseTest.cpp
+++ b/clang/unittests/Format/ConfigParseTest.cpp
@@ -1712,7 +1712,8 @@ TEST(ConfigParseTest, GetStyleOfFile) {
// Test 9.8: use inheritance from a file without BasedOnStyle
ASSERT_TRUE(FS.addFile(
"/e/withoutbase/.clang-format", 0,
- llvm::MemoryBuffer::getMemBuffer("BracedInitializerIndentWidth: 2\n"
+ llvm::MemoryBuffer::getMemBuffer("AlignAfterOpenBracket: false\n"
+ "BracedInitializerIndentWidth: 2\n"
"ColumnLimit: 123")));
ASSERT_TRUE(
FS.addFile("/e/withoutbase/sub/.clang-format", 0,
@@ -1723,6 +1724,7 @@ TEST(ConfigParseTest, GetStyleOfFile) {
ASSERT_TRUE(static_cast<bool>(Style9));
ASSERT_EQ(*Style9, [] {
auto Style = getLLVMStyle();
+ Style.AlignAfterOpenBracket = false;
Style.BracedInitializerIndentWidth = 2;
Style.ColumnLimit = 123;
return Style;
@@ -1732,6 +1734,7 @@ TEST(ConfigParseTest, GetStyleOfFile) {
ASSERT_TRUE(static_cast<bool>(Style9));
ASSERT_EQ(*Style9, [] {
auto Style = getLLVMStyle();
+ Style.AlignAfterOpenBracket = false;
Style.BracedInitializerIndentWidth = 2;
Style.ColumnLimit = 123;
Style.IndentWidth = 7;
More information about the cfe-commits
mailing list