Author: Michael Zimmermann Date: 2022-01-03T20:01:10+01:00 New Revision: 7972b2e42276346e85bb6d4fb7e03bbd5a9af53f
URL: https://github.com/llvm/llvm-project/commit/7972b2e42276346e85bb6d4fb7e03bbd5a9af53f DIFF: https://github.com/llvm/llvm-project/commit/7972b2e42276346e85bb6d4fb7e03bbd5a9af53f.diff LOG: [clang-format] respect AfterEnum for enums There is some similar looking code in `TokenAnnotator.cpp` but given that I've never worked on clang-format before I don't know what the purpose of that code is and how it's related to `UnwrappedLineParser.cpp`. Either way, it fixes clang-format with `BraceWrapping.AfterEnum=true` and `AllowShortEnumsOnASingleLine=false` to behave like the documentation says. Before this patch: ``` enum { A, B } myEnum; ``` After this patch: ``` enum { A, B } myEnum; ``` According to the unittests which I had to modify this would change the LLVM style. Please evaluate if you want to change the defaults or if you consider the current style a bug. Reviewed By: curdeius, HazardyKnusperkeks Differential Revision: https://reviews.llvm.org/D106349 Added: Modified: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp Removed: ################################################################################ diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index b6e55aab708f..0579acf36391 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -782,6 +782,8 @@ static bool ShouldBreakBeforeBrace(const FormatStyle &Style, 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; } @@ -2606,12 +2608,12 @@ void UnwrappedLineParser::parseRequires() { } bool UnwrappedLineParser::parseEnum() { + const FormatToken &InitialToken = *FormatTok; + // Won't be 'enum' for NS_ENUMs. if (FormatTok->Tok.is(tok::kw_enum)) nextToken(); - const FormatToken &InitialToken = *FormatTok; - // In TypeScript, "enum" can also be used as property name, e.g. in interface // declarations. An "enum" keyword followed by a colon would be a syntax // error and thus assume it is just an identifier. diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 7a7976c8b081..470b0c7a19e5 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -2535,6 +2535,13 @@ TEST_F(FormatTest, ShortEnums) { " C\n" "} ShortEnum1, ShortEnum2;", Style); + verifyFormat("typedef enum\n" + "{\n" + " A,\n" + " B,\n" + " C\n" + "} ShortEnum1, ShortEnum2;", + Style); } TEST_F(FormatTest, ShortCaseLabels) { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits