clang-format: Improve recovery from enums with errors.
Before:
namespace n {
enum Type {
One,
Two, // missing };
int i;
} void g() {
}
After:
namespace n {
enum Type {
One,
Two, // missing };
int i;
}
void g() {}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@189662 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp
index 9e4600b..fb63899 100644
--- a/lib/Format/UnwrappedLineParser.cpp
+++ b/lib/Format/UnwrappedLineParser.cpp
@@ -937,6 +937,7 @@
if (FormatTok->Tok.is(tok::identifier))
nextToken();
}
+ bool HasError = false;
if (FormatTok->Tok.is(tok::l_brace)) {
if (Style.BreakBeforeBraces == FormatStyle::BS_Allman)
addUnwrappedLine();
@@ -952,7 +953,17 @@
addUnwrappedLine();
nextToken();
--Line->Level;
+ if (HasError) {
+ if (FormatTok->is(tok::semi))
+ nextToken();
+ addUnwrappedLine();
+ }
return;
+ case tok::semi:
+ HasError = true;
+ nextToken();
+ addUnwrappedLine();
+ break;
case tok::comma:
nextToken();
addUnwrappedLine();