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:
		
							parent
							
								
									6137942d09
								
							
						
					
					
						commit
						b7076a2308
					
				| 
						 | 
					@ -99,19 +99,38 @@ void UnwrappedLineParser::parseComment() {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void UnwrappedLineParser::parseStatement() {
 | 
					void UnwrappedLineParser::parseStatement() {
 | 
				
			||||||
  if (FormatTok.Tok.is(tok::kw_public) || FormatTok.Tok.is(tok::kw_protected) ||
 | 
					  switch (FormatTok.Tok.getKind()) {
 | 
				
			||||||
      FormatTok.Tok.is(tok::kw_private)) {
 | 
					  case tok::kw_public:
 | 
				
			||||||
 | 
					  case tok::kw_protected:
 | 
				
			||||||
 | 
					  case tok::kw_private:
 | 
				
			||||||
    parseAccessSpecifier();
 | 
					    parseAccessSpecifier();
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
  }
 | 
					  case tok::kw_if:
 | 
				
			||||||
  if (FormatTok.Tok.is(tok::kw_enum)) {
 | 
					    parseIfThenElse();
 | 
				
			||||||
    parseEnum();
 | 
					 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
 | 
					  case tok::kw_do:
 | 
				
			||||||
 | 
					    parseDoWhile();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  case tok::kw_switch:
 | 
				
			||||||
 | 
					    parseSwitch();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  case tok::kw_default:
 | 
				
			||||||
 | 
					    nextToken();
 | 
				
			||||||
 | 
					    parseLabel();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  case tok::kw_case:
 | 
				
			||||||
 | 
					    parseCaseLabel();
 | 
				
			||||||
 | 
					    return;
 | 
				
			||||||
 | 
					  default:
 | 
				
			||||||
 | 
					    break;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  int TokenNumber = 0;
 | 
					  int TokenNumber = 0;
 | 
				
			||||||
  do {
 | 
					  do {
 | 
				
			||||||
    ++TokenNumber;
 | 
					    ++TokenNumber;
 | 
				
			||||||
    switch (FormatTok.Tok.getKind()) {
 | 
					    switch (FormatTok.Tok.getKind()) {
 | 
				
			||||||
 | 
					    case tok::kw_enum:
 | 
				
			||||||
 | 
					      parseEnum();
 | 
				
			||||||
 | 
					      return;
 | 
				
			||||||
    case tok::semi:
 | 
					    case tok::semi:
 | 
				
			||||||
      nextToken();
 | 
					      nextToken();
 | 
				
			||||||
      addUnwrappedLine();
 | 
					      addUnwrappedLine();
 | 
				
			||||||
| 
						 | 
					@ -123,32 +142,16 @@ void UnwrappedLineParser::parseStatement() {
 | 
				
			||||||
      parseBlock();
 | 
					      parseBlock();
 | 
				
			||||||
      addUnwrappedLine();
 | 
					      addUnwrappedLine();
 | 
				
			||||||
      return;
 | 
					      return;
 | 
				
			||||||
    case tok::kw_if:
 | 
					    case tok::identifier:
 | 
				
			||||||
      parseIfThenElse();
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    case tok::kw_do:
 | 
					 | 
				
			||||||
      parseDoWhile();
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    case tok::kw_switch:
 | 
					 | 
				
			||||||
      parseSwitch();
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    case tok::kw_default:
 | 
					 | 
				
			||||||
      nextToken();
 | 
					 | 
				
			||||||
      parseLabel();
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    case tok::kw_case:
 | 
					 | 
				
			||||||
      parseCaseLabel();
 | 
					 | 
				
			||||||
      return;
 | 
					 | 
				
			||||||
    case tok::raw_identifier:
 | 
					 | 
				
			||||||
      nextToken();
 | 
					 | 
				
			||||||
      break;
 | 
					 | 
				
			||||||
    default:
 | 
					 | 
				
			||||||
      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 {
 | 
				
			||||||
    nextToken();
 | 
					    switch (FormatTok.Tok.getKind()) {
 | 
				
			||||||
    if (FormatTok.Tok.is(tok::semi)) {
 | 
					    case tok::l_brace:
 | 
				
			||||||
 | 
					      nextToken();
 | 
				
			||||||
 | 
					      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());
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue