diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -694,6 +694,8 @@ return Style.BraceWrapping.AfterUnion; if (InitialToken.is(tok::kw_struct)) return Style.BraceWrapping.AfterStruct; + if (InitialToken.is(tok::kw_enum)) + return Style.BraceWrapping.AfterEnum; return false; } @@ -2482,8 +2484,9 @@ return true; } - if (!Style.AllowShortEnumsOnASingleLine) + if (!Style.AllowShortEnumsOnASingleLine && Style.BraceWrapping.AfterEnum) addUnwrappedLine(); + // Parse enum body. nextToken(); if (!Style.AllowShortEnumsOnASingleLine) { diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -1344,12 +1344,52 @@ Style.AllowShortEnumsOnASingleLine = true; verifyFormat("enum { A, B, C } ShortEnum1, ShortEnum2;", Style); Style.AllowShortEnumsOnASingleLine = false; + verifyFormat("enum {\n" + " A,\n" + " B,\n" + " C\n" + "} ShortEnum1, ShortEnum2;", + Style); +} + +TEST_F(FormatTest, AfterEnum) { + FormatStyle Style = getLLVMStyle(); + Style.BreakBeforeBraces = FormatStyle::BS_Custom; + + Style.AllowShortEnumsOnASingleLine = true; + Style.BraceWrapping.AfterEnum = true; + verifyFormat("enum { A, B, C } Test1;", Style); + verifyFormat("enum\n" + "{\n" + " A,\n" + " B, // foo\n" + " C\n" + "} Test2;", + Style); + Style.BraceWrapping.AfterEnum = false; + verifyFormat("enum { A, B, C } Test3;", Style); + verifyFormat("enum {\n" + " A,\n" + " B, // foo\n" + " C\n" + "} Test4;", + Style); + + Style.AllowShortEnumsOnASingleLine = false; + Style.BraceWrapping.AfterEnum = true; verifyFormat("enum\n" "{\n" " A,\n" " B,\n" " C\n" - "} ShortEnum1, ShortEnum2;", + "} Test5;", + Style); + Style.BraceWrapping.AfterEnum = false; + verifyFormat("enum {\n" + " A,\n" + " B,\n" + " C\n" + "} Test6;", Style); }