summaryrefslogtreecommitdiffstats
path: root/clang/lib/Format/UnwrappedLineParser.cpp
diff options
context:
space:
mode:
authorKrasimir Georgiev <krasimir@google.com>2017-06-27 13:43:07 +0000
committerKrasimir Georgiev <krasimir@google.com>2017-06-27 13:43:07 +0000
commitff747be4d50cb70f7d13e09f38ab093cdddeef95 (patch)
treef086e6bf2ef5ec68162ac7384d53d0a3ea9b218b /clang/lib/Format/UnwrappedLineParser.cpp
parent4155c8f1f358d873f67afcc6240f4adb67011bfd (diff)
downloadbcm5719-llvm-ff747be4d50cb70f7d13e09f38ab093cdddeef95.tar.gz
bcm5719-llvm-ff747be4d50cb70f7d13e09f38ab093cdddeef95.zip
[clang-format] Support <>-style proto message fields
Summary: This patch adds support for <>-style proto message fields inside proto options. Previously these were wrongly treated as binary operators and as such were working only by chance for a limited number of cases. Reviewers: djasper Reviewed By: djasper Subscribers: cfe-commits, klimek Differential Revision: https://reviews.llvm.org/D34621 llvm-svn: 306406
Diffstat (limited to 'clang/lib/Format/UnwrappedLineParser.cpp')
-rw-r--r--clang/lib/Format/UnwrappedLineParser.cpp16
1 files changed, 10 insertions, 6 deletions
diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp
index f7678bb6b2a..261ae3030d9 100644
--- a/clang/lib/Format/UnwrappedLineParser.cpp
+++ b/clang/lib/Format/UnwrappedLineParser.cpp
@@ -1176,9 +1176,11 @@ void UnwrappedLineParser::parseStructuralElement() {
}
nextToken();
- if (FormatTok->Tok.is(tok::l_brace)) {
+ if (FormatTok->Tok.is(tok::l_brace))
parseBracedList();
- }
+ else if (Style.Language == FormatStyle::LK_Proto &&
+ FormatTok->Tok.is(tok::less))
+ parseBracedList(/*ClosingBraceKind=*/tok::greater);
break;
case tok::l_square:
parseSquare();
@@ -1346,7 +1348,8 @@ bool UnwrappedLineParser::tryToParseBracedList() {
return true;
}
-bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons) {
+bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons,
+ tok::TokenKind ClosingBraceKind) {
bool HasError = false;
nextToken();
@@ -1375,6 +1378,10 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons) {
parseChildBlock();
}
}
+ if (FormatTok->Tok.getKind() == ClosingBraceKind) {
+ nextToken();
+ return !HasError;
+ }
switch (FormatTok->Tok.getKind()) {
case tok::caret:
nextToken();
@@ -1401,9 +1408,6 @@ bool UnwrappedLineParser::parseBracedList(bool ContinueOnSemicolons) {
FormatTok->BlockKind = BK_BracedInit;
parseBracedList();
break;
- case tok::r_brace:
- nextToken();
- return !HasError;
case tok::semi:
// JavaScript (or more precisely TypeScript) can have semicolons in braced
// lists (in so-called TypeMemberLists). Thus, the semicolon cannot be
OpenPOWER on IntegriCloud