PriMee created this revision.
Herald added a subscriber: klimek.
Bug: https://bugs.llvm.org/show_bug.cgi?id=34016
**Problem:**
Clang format does not allow the flag **BraceWrapping.AfterEnum** control the
case when our **enum** is preceded by **typedef** keyword (what is common in C
language).
Due to the lack of "brace wrapping extern" flag, clang format does parse the
block after **extern** keyword moving the opening bracket to the header line
**always**!
**Patch description:**
Added case to the **"AfterEnum"** flag when our enum does not start a line - is
preceded by **typedef** keyword.
Added if statement handling the case when our **"extern block"** has the
opening bracket in "non-header" line. Then forcing break before bracket.
**After fix:**
**BEFORE:**
typedef enum
{
a,
b,
c
} SomeEnum;
extern "C"
{
#include <SomeInclude.h>
}
**AFTER:**
typedef enum
{
a,
b,
c
} SomeEnum;
extern "C"
{
#include <SomeInclude.h>
}
**Remains the same!**
https://reviews.llvm.org/D37143
Files:
lib/Format/TokenAnnotator.cpp
lib/Format/UnwrappedLineParser.cpp
Index: lib/Format/UnwrappedLineParser.cpp
===================================================================
--- lib/Format/UnwrappedLineParser.cpp
+++ lib/Format/UnwrappedLineParser.cpp
@@ -986,6 +986,8 @@
if (FormatTok->Tok.is(tok::string_literal)) {
nextToken();
if (FormatTok->Tok.is(tok::l_brace)) {
+ if (isOnNewLine(*FormatTok))
+ MustBreakBeforeNextToken = true;
parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
addUnwrappedLine();
return;
Index: lib/Format/TokenAnnotator.cpp
===================================================================
--- lib/Format/TokenAnnotator.cpp
+++ lib/Format/TokenAnnotator.cpp
@@ -2647,6 +2647,7 @@
return Right.HasUnescapedNewline;
if (isAllmanBrace(Left) || isAllmanBrace(Right))
return (Line.startsWith(tok::kw_enum) && Style.BraceWrapping.AfterEnum) ||
+ (Line.startsWith(tok::kw_typedef, tok::kw_enum) &&
Style.BraceWrapping.AfterEnum) ||
(Line.startsWith(tok::kw_class) && Style.BraceWrapping.AfterClass)
||
(Line.startsWith(tok::kw_struct) &&
Style.BraceWrapping.AfterStruct);
if (Left.is(TT_ObjCBlockLBrace) && !Style.AllowShortBlocksOnASingleLine)
Index: lib/Format/UnwrappedLineParser.cpp
===================================================================
--- lib/Format/UnwrappedLineParser.cpp
+++ lib/Format/UnwrappedLineParser.cpp
@@ -986,6 +986,8 @@
if (FormatTok->Tok.is(tok::string_literal)) {
nextToken();
if (FormatTok->Tok.is(tok::l_brace)) {
+ if (isOnNewLine(*FormatTok))
+ MustBreakBeforeNextToken = true;
parseBlock(/*MustBeDeclaration=*/true, /*AddLevel=*/false);
addUnwrappedLine();
return;
Index: lib/Format/TokenAnnotator.cpp
===================================================================
--- lib/Format/TokenAnnotator.cpp
+++ lib/Format/TokenAnnotator.cpp
@@ -2647,6 +2647,7 @@
return Right.HasUnescapedNewline;
if (isAllmanBrace(Left) || isAllmanBrace(Right))
return (Line.startsWith(tok::kw_enum) && Style.BraceWrapping.AfterEnum) ||
+ (Line.startsWith(tok::kw_typedef, tok::kw_enum) && Style.BraceWrapping.AfterEnum) ||
(Line.startsWith(tok::kw_class) && Style.BraceWrapping.AfterClass) ||
(Line.startsWith(tok::kw_struct) && Style.BraceWrapping.AfterStruct);
if (Left.is(TT_ObjCBlockLBrace) && !Style.AllowShortBlocksOnASingleLine)
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits