r189662 - clang-format: Improve recovery from enums with errors.
Daniel Jasper
djasper at google.com
Fri Aug 30 03:10:20 PDT 2013
Author: djasper
Date: Fri Aug 30 05:10:19 2013
New Revision: 189662
URL: http://llvm.org/viewvc/llvm-project?rev=189662&view=rev
Log:
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() {}
Modified:
cfe/trunk/lib/Format/UnwrappedLineParser.cpp
cfe/trunk/unittests/Format/FormatTest.cpp
Modified: cfe/trunk/lib/Format/UnwrappedLineParser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/UnwrappedLineParser.cpp?rev=189662&r1=189661&r2=189662&view=diff
==============================================================================
--- cfe/trunk/lib/Format/UnwrappedLineParser.cpp (original)
+++ cfe/trunk/lib/Format/UnwrappedLineParser.cpp Fri Aug 30 05:10:19 2013
@@ -937,6 +937,7 @@ void UnwrappedLineParser::parseEnum() {
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 @@ void UnwrappedLineParser::parseEnum() {
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();
Modified: cfe/trunk/unittests/Format/FormatTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=189662&r1=189661&r2=189662&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Fri Aug 30 05:10:19 2013
@@ -1519,6 +1519,20 @@ TEST_F(FormatTest, FormatsEnum) {
verifyFormat("enum X f() {\n a();\n return 42;\n}");
}
+TEST_F(FormatTest, FormatsEnumsWithErrors) {
+ verifyFormat("enum Type {\n"
+ " One = 0;\n" // These semicolons should be commas.
+ " Two = 1;\n"
+ "};");
+ verifyFormat("namespace n {\n"
+ "enum Type {\n"
+ " One,\n"
+ " Two,\n" // missing };
+ " int i;\n"
+ "}\n"
+ "void g() {}");
+}
+
TEST_F(FormatTest, FormatsEnumStruct) {
verifyFormat("enum struct {\n"
" Zero,\n"
More information about the cfe-commits
mailing list