forked from OSchip/llvm-project
[clang-format] Fix short block when braking after control statement
Summary: This patch fixes bug #44192 When clang-format is run with option AllowShortBlocksOnASingleLine, it is expected to either succeed in putting the short block with its control statement on a single line or fail and leave the block as is. When brace wrapping after control statement is activated, if the block + the control statement length is superior to column limit but the block alone is not, clang-format puts the block in two lines: one for the control statement and one for the block. This patch removes this unexpected behaviour. Current unittests are updated to check for this behaviour. Patch By: Bouska Reviewed By: MyDeveloperDay Differential Revision: https://reviews.llvm.org/D71512
This commit is contained in:
parent
6a79f5aa5d
commit
0487f6f19c
|
@ -342,21 +342,6 @@ private:
|
|||
? 1
|
||||
: 0;
|
||||
}
|
||||
// Try to merge either empty or one-line block if is precedeed by control
|
||||
// statement token
|
||||
if (TheLine->First->is(tok::l_brace) && TheLine->First == TheLine->Last &&
|
||||
I != AnnotatedLines.begin() &&
|
||||
I[-1]->First->isOneOf(tok::kw_if, tok::kw_while, tok::kw_for)) {
|
||||
unsigned MergedLines = 0;
|
||||
if (Style.AllowShortBlocksOnASingleLine != FormatStyle::SBS_Never) {
|
||||
MergedLines = tryMergeSimpleBlock(I - 1, E, Limit);
|
||||
// If we managed to merge the block, discard the first merged line
|
||||
// since we are merging starting from I.
|
||||
if (MergedLines > 0)
|
||||
--MergedLines;
|
||||
}
|
||||
return MergedLines;
|
||||
}
|
||||
// Don't merge block with left brace wrapped after ObjC special blocks
|
||||
if (TheLine->First->is(tok::l_brace) && I != AnnotatedLines.begin() &&
|
||||
I[-1]->First->is(tok::at) && I[-1]->First->Next) {
|
||||
|
|
|
@ -606,6 +606,12 @@ TEST_F(FormatTest, FormatShortBracedStatements) {
|
|||
verifyFormat("if CONSTEXPR (true) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("while (true) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("for (;;) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true) { fffffffffffffffffffffff(); }",
|
||||
AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true) {\n"
|
||||
" ffffffffffffffffffffffff();\n"
|
||||
"}",
|
||||
AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true) {\n"
|
||||
" ffffffffffffffffffffffffffffffffffffffffffffffffffffff();\n"
|
||||
"}",
|
||||
|
@ -681,6 +687,13 @@ TEST_F(FormatTest, FormatShortBracedStatements) {
|
|||
verifyFormat("if CONSTEXPR (true) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("while (true) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("for (;;) { f(); }", AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true) { fffffffffffffffffffffff(); }",
|
||||
AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true)\n"
|
||||
"{\n"
|
||||
" ffffffffffffffffffffffff();\n"
|
||||
"}",
|
||||
AllowSimpleBracedStatements);
|
||||
verifyFormat("if (true)\n"
|
||||
"{\n"
|
||||
" ffffffffffffffffffffffffffffffffffffffffffffffffffffff();\n"
|
||||
|
@ -745,7 +758,9 @@ TEST_F(FormatTest, ShortBlocksInMacrosDontMergeWithCodeAfterMacro) {
|
|||
Style.BreakBeforeBraces = FormatStyle::BS_Allman;
|
||||
EXPECT_EQ("#define A \\\n"
|
||||
" if (HANDLEwernufrnuLwrmviferuvnierv) \\\n"
|
||||
" { RET_ERR1_ANUIREUINERUIFNIOAerwfwrvnuier; }\n"
|
||||
" { \\\n"
|
||||
" RET_ERR1_ANUIREUINERUIFNIOAerwfwrvnuier; \\\n"
|
||||
" }\n"
|
||||
"X;",
|
||||
format("#define A \\\n"
|
||||
" if (HANDLEwernufrnuLwrmviferuvnierv) { \\\n"
|
||||
|
|
Loading…
Reference in New Issue