[clang] 7972b2e - [clang-format] respect AfterEnum for enums
Marek Kurdej via cfe-commits
cfe-commits at lists.llvm.org
Mon Jan 3 11:01:16 PST 2022
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) {
More information about the cfe-commits
mailing list