Skip to content

Commit eb50838

Browse files
[clang-format] [PR462254] fix indentation of default and break correctly in whitesmiths style
Summary: https://bugs.llvm.org/show_bug.cgi?id=46254 Reviewed By: curdeius, jbcoe Differential Revision: https://reviews.llvm.org/D8201
1 parent 892df9e commit eb50838

File tree

3 files changed

+85
-15
lines changed

3 files changed

+85
-15
lines changed

clang/lib/Format/UnwrappedLineFormatter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1230,7 +1230,8 @@ void UnwrappedLineFormatter::formatFirstToken(
12301230

12311231
// If in Whitemsmiths mode, indent start and end of blocks
12321232
if (Style.BreakBeforeBraces == FormatStyle::BS_Whitesmiths) {
1233-
if (RootToken.isOneOf(tok::l_brace, tok::r_brace, tok::kw_case))
1233+
if (RootToken.isOneOf(tok::l_brace, tok::r_brace, tok::kw_case,
1234+
tok::kw_default))
12341235
Indent += Style.IndentWidth;
12351236
}
12361237

clang/lib/Format/UnwrappedLineParser.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2220,8 +2220,13 @@ void UnwrappedLineParser::parseLabel(bool LeftAlignLabel) {
22202220
parseBlock(/*MustBeDeclaration=*/false);
22212221
if (FormatTok->Tok.is(tok::kw_break)) {
22222222
if (Style.BraceWrapping.AfterControlStatement ==
2223-
FormatStyle::BWACS_Always)
2223+
FormatStyle::BWACS_Always) {
22242224
addUnwrappedLine();
2225+
if (!Style.IndentCaseBlocks &&
2226+
Style.BreakBeforeBraces == FormatStyle::BS_Whitesmiths) {
2227+
Line->Level++;
2228+
}
2229+
}
22252230
parseStructuralElement();
22262231
}
22272232
addUnwrappedLine();

clang/unittests/Format/FormatTest.cpp

Lines changed: 77 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12979,45 +12979,109 @@ TEST_F(FormatTest, WhitesmithsBraceBreaking) {
1297912979
" }\n",
1298012980
WhitesmithsBraceStyle);
1298112981

12982-
// FIXME: the block and the break under case 2 in this test don't get indented
12983-
// correctly
12984-
/*
12982+
WhitesmithsBraceStyle.IndentCaseBlocks = true;
1298512983
verifyFormat("void switchTest1(int a)\n"
1298612984
" {\n"
1298712985
" switch (a)\n"
1298812986
" {\n"
1298912987
" case 2:\n"
1299012988
" {\n"
1299112989
" }\n"
12992-
" break;\n"
12990+
" break;\n"
1299312991
" }\n"
1299412992
" }\n",
1299512993
WhitesmithsBraceStyle);
12996-
*/
1299712994

12998-
// FIXME: the block and the break under case 2 in this test don't get indented
12999-
// correctly
13000-
/*
1300112995
verifyFormat("void switchTest2(int a)\n"
1300212996
" {\n"
1300312997
" switch (a)\n"
1300412998
" {\n"
13005-
" case 0:\n"
12999+
" case 0:\n"
1300613000
" break;\n"
13007-
" case 1:\n"
13001+
" case 1:\n"
13002+
" {\n"
13003+
" break;\n"
13004+
" }\n"
13005+
" case 2:\n"
13006+
" {\n"
13007+
" }\n"
13008+
" break;\n"
13009+
" default:\n"
13010+
" break;\n"
13011+
" }\n"
13012+
" }\n",
13013+
WhitesmithsBraceStyle);
13014+
13015+
verifyFormat("void switchTest3(int a)\n"
13016+
" {\n"
13017+
" switch (a)\n"
1300813018
" {\n"
13019+
" case 0:\n"
13020+
" {\n"
13021+
" foo(x);\n"
13022+
" }\n"
13023+
" break;\n"
13024+
" default:\n"
13025+
" {\n"
13026+
" foo(1);\n"
13027+
" }\n"
1300913028
" break;\n"
1301013029
" }\n"
13011-
" case 2:\n"
13030+
" }\n",
13031+
WhitesmithsBraceStyle);
13032+
13033+
WhitesmithsBraceStyle.IndentCaseBlocks = false;
13034+
13035+
verifyFormat("void switchTest4(int a)\n"
13036+
" {\n"
13037+
" switch (a)\n"
13038+
" {\n"
13039+
" case 2:\n"
1301213040
" {\n"
1301313041
" }\n"
1301413042
" break;\n"
13015-
" default:\n"
13043+
" }\n"
13044+
" }\n",
13045+
WhitesmithsBraceStyle);
13046+
13047+
verifyFormat("void switchTest5(int a)\n"
13048+
" {\n"
13049+
" switch (a)\n"
13050+
" {\n"
13051+
" case 0:\n"
13052+
" break;\n"
13053+
" case 1:\n"
13054+
" {\n"
13055+
" foo();\n"
13056+
" break;\n"
13057+
" }\n"
13058+
" case 2:\n"
13059+
" {\n"
13060+
" }\n"
13061+
" break;\n"
13062+
" default:\n"
13063+
" break;\n"
13064+
" }\n"
13065+
" }\n",
13066+
WhitesmithsBraceStyle);
13067+
13068+
verifyFormat("void switchTest6(int a)\n"
13069+
" {\n"
13070+
" switch (a)\n"
13071+
" {\n"
13072+
" case 0:\n"
13073+
" {\n"
13074+
" foo(x);\n"
13075+
" }\n"
13076+
" break;\n"
13077+
" default:\n"
13078+
" {\n"
13079+
" foo(1);\n"
13080+
" }\n"
1301613081
" break;\n"
1301713082
" }\n"
1301813083
" }\n",
1301913084
WhitesmithsBraceStyle);
13020-
*/
1302113085

1302213086
verifyFormat("enum X\n"
1302313087
" {\n"

0 commit comments

Comments
 (0)