[clang-format] Fix short enums getting wrapped even when denied

Single-variant enums were still getting placed on a single line
even when AllowShortEnumsOnASingleLine was false. This fixes that
by checking that setting when looking to merge lines.

Differential Revision: https://reviews.llvm.org/D116188
This commit is contained in:
Gabriel Smith 2021-12-24 11:38:55 -08:00 committed by owenca
parent 27a0718ad0
commit 8ea64d5585
2 changed files with 23 additions and 1 deletions

View File

@ -393,11 +393,18 @@ private:
// Try to merge a block with left brace wrapped that wasn't yet covered
if (TheLine->Last->is(tok::l_brace)) {
const FormatToken *Tok = TheLine->First;
bool ShouldMerge = false;
if (TheLine->First->isOneOf(tok::kw_class, tok::kw_struct)) {
if (Tok->is(tok::kw_typedef)) {
Tok = Tok->getNextNonComment();
assert(Tok);
}
if (Tok->isOneOf(tok::kw_class, tok::kw_struct)) {
ShouldMerge = !Style.BraceWrapping.AfterClass ||
(I[1]->First->is(tok::r_brace) &&
!Style.BraceWrapping.SplitEmptyRecord);
} else if (Tok->is(tok::kw_enum)) {
ShouldMerge = Style.AllowShortEnumsOnASingleLine;
} else {
ShouldMerge = !Style.BraceWrapping.AfterFunction ||
(I[1]->First->is(tok::r_brace) &&

View File

@ -2504,6 +2504,7 @@ TEST_F(FormatTest, ShortEnums) {
FormatStyle Style = getLLVMStyle();
Style.AllowShortEnumsOnASingleLine = true;
verifyFormat("enum { A, B, C } ShortEnum1, ShortEnum2;", Style);
verifyFormat("typedef enum { A, B, C } ShortEnum1, ShortEnum2;", Style);
Style.AllowShortEnumsOnASingleLine = false;
verifyFormat("enum {\n"
" A,\n"
@ -2511,6 +2512,20 @@ TEST_F(FormatTest, ShortEnums) {
" C\n"
"} ShortEnum1, ShortEnum2;",
Style);
verifyFormat("typedef enum {\n"
" A,\n"
" B,\n"
" C\n"
"} ShortEnum1, ShortEnum2;",
Style);
verifyFormat("enum {\n"
" A,\n"
"} ShortEnum1, ShortEnum2;",
Style);
verifyFormat("typedef enum {\n"
" A,\n"
"} ShortEnum1, ShortEnum2;",
Style);
Style.BreakBeforeBraces = FormatStyle::BS_Custom;
Style.BraceWrapping.AfterEnum = true;
verifyFormat("enum\n"