Author: Gabriel Smith Date: 2021-12-24T11:38:55-08:00 New Revision: 8ea64d5585ec3a0a52db20c9e57ac9bed9e80fc2
URL: https://github.com/llvm/llvm-project/commit/8ea64d5585ec3a0a52db20c9e57ac9bed9e80fc2 DIFF: https://github.com/llvm/llvm-project/commit/8ea64d5585ec3a0a52db20c9e57ac9bed9e80fc2.diff LOG: [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 Added: Modified: clang/lib/Format/UnwrappedLineFormatter.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineFormatter.cpp b/clang/lib/Format/UnwrappedLineFormatter.cpp index 3d4c1a4f903b2..f652a4e7088f1 100644 --- a/clang/lib/Format/UnwrappedLineFormatter.cpp +++ b/clang/lib/Format/UnwrappedLineFormatter.cpp @@ -393,11 +393,18 @@ class LineJoiner { // 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) && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index ee486f4521949..374f3865acc3b 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -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" _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits