Enum formatting implementation

Reviewers: djasper, klimek

Reviewed By: klimek

CC: cfe-commits

Differential Revision: http://llvm-reviews.chandlerc.com/D161

llvm-svn: 169272
This commit is contained in:
Alexander Kornienko 2012-12-04 14:46:19 +00:00
parent 6137942d09
commit b7076a2308
2 changed files with 68 additions and 27 deletions

View File

@ -99,29 +99,11 @@ void UnwrappedLineParser::parseComment() {
} }
void UnwrappedLineParser::parseStatement() { void UnwrappedLineParser::parseStatement() {
if (FormatTok.Tok.is(tok::kw_public) || FormatTok.Tok.is(tok::kw_protected) ||
FormatTok.Tok.is(tok::kw_private)) {
parseAccessSpecifier();
return;
}
if (FormatTok.Tok.is(tok::kw_enum)) {
parseEnum();
return;
}
int TokenNumber = 0;
do {
++TokenNumber;
switch (FormatTok.Tok.getKind()) { switch (FormatTok.Tok.getKind()) {
case tok::semi: case tok::kw_public:
nextToken(); case tok::kw_protected:
addUnwrappedLine(); case tok::kw_private:
return; parseAccessSpecifier();
case tok::l_paren:
parseParens();
break;
case tok::l_brace:
parseBlock();
addUnwrappedLine();
return; return;
case tok::kw_if: case tok::kw_if:
parseIfThenElse(); parseIfThenElse();
@ -139,16 +121,37 @@ void UnwrappedLineParser::parseStatement() {
case tok::kw_case: case tok::kw_case:
parseCaseLabel(); parseCaseLabel();
return; return;
case tok::raw_identifier:
nextToken();
break;
default: default:
break;
}
int TokenNumber = 0;
do {
++TokenNumber;
switch (FormatTok.Tok.getKind()) {
case tok::kw_enum:
parseEnum();
return;
case tok::semi:
nextToken();
addUnwrappedLine();
return;
case tok::l_paren:
parseParens();
break;
case tok::l_brace:
parseBlock();
addUnwrappedLine();
return;
case tok::identifier:
nextToken(); nextToken();
if (TokenNumber == 1 && FormatTok.Tok.is(tok::colon)) { if (TokenNumber == 1 && FormatTok.Tok.is(tok::colon)) {
parseLabel(); parseLabel();
return; return;
} }
break; break;
default:
nextToken();
break;
} }
} while (!eof()); } while (!eof());
} }
@ -265,12 +268,35 @@ void UnwrappedLineParser::parseAccessSpecifier() {
} }
void UnwrappedLineParser::parseEnum() { void UnwrappedLineParser::parseEnum() {
bool HasContents = false;
do { do {
switch (FormatTok.Tok.getKind()) {
case tok::l_brace:
nextToken(); nextToken();
if (FormatTok.Tok.is(tok::semi)) { addUnwrappedLine();
++Line.Level;
break;
case tok::l_paren:
parseParens();
break;
case tok::comma:
nextToken();
addUnwrappedLine();
break;
case tok::r_brace:
if (HasContents)
addUnwrappedLine();
--Line.Level;
nextToken();
break;
case tok::semi:
nextToken(); nextToken();
addUnwrappedLine(); addUnwrappedLine();
return; return;
default:
HasContents = true;
nextToken();
break;
} }
} while (!eof()); } while (!eof());
} }

View File

@ -244,6 +244,21 @@ TEST_F(FormatTest, DoWhile) {
"while (something());"); "while (something());");
} }
TEST_F(FormatTest, Enum) {
verifyFormat("enum {\n"
" Zero,\n"
" One = 1,\n"
" Two = One + 1,\n"
" Three = (One + Two),\n"
" Four = (Zero && (One ^ Two)) | (One << Two),\n"
" Five = (One, Two, Three, Four, 5)\n"
"};");
verifyFormat("enum Enum {\n"
"};");
verifyFormat("enum {\n"
"};");
}
TEST_F(FormatTest, BreaksDesireably) { TEST_F(FormatTest, BreaksDesireably) {
verifyFormat("if (aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n" verifyFormat("if (aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n"
" aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n" " aaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaa) ||\n"