[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:
1 parent
f242ad87ff
commit
be11e2b3d2
2 files changed
+47
-15
No files matched your search
+43
-14
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user