diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Format/Format.cpp | 9 | ||||
-rw-r--r-- | lib/Format/UnwrappedLineParser.cpp | 27 | ||||
-rw-r--r-- | lib/Format/UnwrappedLineParser.h | 2 |
3 files changed, 21 insertions, 17 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index e8faa12a26..eb077d39e5 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -734,15 +734,16 @@ private: } bool canBreakBetween(const FormatToken &Left, const FormatToken &Right) { - if (Right.Tok.is(tok::r_paren)) + if (Right.Tok.is(tok::r_paren) || Right.Tok.is(tok::l_brace) || + Right.Tok.is(tok::comment) || Right.Tok.is(tok::greater)) return false; if (isBinaryOperator(Left)) return true; if (Right.Tok.is(tok::lessless)) return true; - return Right.Tok.is(tok::colon) || Left.Tok.is(tok::comma) || - Left.Tok.is(tok::semi) || Left.Tok.is(tok::equal) || - Left.Tok.is(tok::ampamp) || Left.Tok.is(tok::pipepipe) || + return Right.Tok.is(tok::colon) || Left.Tok.is(tok::comma) || Left.Tok.is( + tok::semi) || Left.Tok.is(tok::equal) || Left.Tok.is(tok::ampamp) || + Left.Tok.is(tok::pipepipe) || Left.Tok.is(tok::l_brace) || (Left.Tok.is(tok::l_paren) && !Right.Tok.is(tok::r_paren)); } diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index 8545f336b8..7e91cb4351 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -43,7 +43,8 @@ bool UnwrappedLineParser::parseLevel() { parsePPDirective(); break; case tok::comment: - parseComment(); + nextToken(); + addUnwrappedLine(); break; case tok::l_brace: Error |= parseBlock(); @@ -90,22 +91,16 @@ void UnwrappedLineParser::parsePPDirective() { } } -void UnwrappedLineParser::parseComment() { - while (!eof()) { - nextToken(); - if (FormatTok.NewlinesBefore > 0) { - addUnwrappedLine(); - return; - } - } -} - -void UnwrappedLineParser::parseStatement() { +void UnwrappedLineParser::parseComments() { // Consume leading line comments, e.g. for branches without compounds. while (FormatTok.Tok.is(tok::comment)) { nextToken(); addUnwrappedLine(); } +} + +void UnwrappedLineParser::parseStatement() { + parseComments(); switch (FormatTok.Tok.getKind()) { case tok::kw_namespace: @@ -164,6 +159,12 @@ void UnwrappedLineParser::parseStatement() { return; } break; + case tok::equal: + nextToken(); + // Skip initializers as they will be formatted by a later step. + if (FormatTok.Tok.is(tok::l_brace)) + nextToken(); + break; default: nextToken(); break; @@ -325,6 +326,7 @@ void UnwrappedLineParser::parseEnum() { nextToken(); addUnwrappedLine(); ++Line.Level; + parseComments(); break; case tok::l_paren: parseParens(); @@ -332,6 +334,7 @@ void UnwrappedLineParser::parseEnum() { case tok::comma: nextToken(); addUnwrappedLine(); + parseComments(); break; case tok::r_brace: if (HasContents) diff --git a/lib/Format/UnwrappedLineParser.h b/lib/Format/UnwrappedLineParser.h index 908391d3db..287194f2a6 100644 --- a/lib/Format/UnwrappedLineParser.h +++ b/lib/Format/UnwrappedLineParser.h @@ -96,7 +96,7 @@ private: bool parseLevel(); bool parseBlock(unsigned AddLevels = 1); void parsePPDirective(); - void parseComment(); + void parseComments(); void parseStatement(); void parseParens(); void parseIfThenElse(); |