[clang-format] Wrapped block after case label should not be merged into one line

PR38854

Differential Revision: http://reviews.llvm.org/D51719

llvm-svn: 342116
This commit is contained in:
Owen Pan 2018-09-13 07:27:15 +00:00
parent 2fb44808b1
commit 58c3dee3b3
2 changed files with 30 additions and 0 deletions

View File

@ -323,6 +323,10 @@ private:
kwId == clang::tok::objc_synchronized)
return 0;
}
// Don't merge block with left brace wrapped after case labels
if (TheLine->First->is(tok::l_brace) && I != AnnotatedLines.begin() &&
I[-1]->First->isOneOf(tok::kw_case, tok::kw_default))
return 0;
// Try to merge a block with left brace wrapped that wasn't yet covered
if (TheLine->Last->is(tok::l_brace)) {
return !Style.BraceWrapping.AfterFunction ||

View File

@ -1064,6 +1064,32 @@ TEST_F(FormatTest, FormatsSwitchStatement) {
" return;\n"
"}",
getLLVMStyleWithColumns(34));
FormatStyle Style = getLLVMStyle();
Style.IndentCaseLabels = true;
Style.AllowShortBlocksOnASingleLine = false;
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
Style.BraceWrapping.AfterControlStatement = true;
EXPECT_EQ("switch (n)\n"
"{\n"
" case 0:\n"
" {\n"
" return false;\n"
" }\n"
" default:\n"
" {\n"
" return true;\n"
" }\n"
"}",
format("switch (n) {\n"
" case 0: {\n"
" return false;\n"
" }\n"
" default: {\n"
" return true;\n"
" }\n"
"}",
Style));
}
TEST_F(FormatTest, CaseRanges) {