[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
This commit is contained in:
Gedare Bloom authored and GitHub committed 2026-05-01 21:37:21 +02:00
1 parent f242ad87ff
commit be11e2b3d2
2 files changed
+47 -15

No files matched your search

+43 -14
View File
@@ -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;
}
}
+4 -1
View File
@@ -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;