clang-format: Cleanup array initializer and dict initializer formatting.
Significant changes:
- Also recognize these literals with missing "@" for robustness.
- Reorganize tests.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@193325 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp
index e398442..7fa9621 100644
--- a/lib/Format/TokenAnnotator.cpp
+++ b/lib/Format/TokenAnnotator.cpp
@@ -235,7 +235,8 @@
if (CurrentToken->isOneOf(tok::r_paren, tok::r_brace))
return false;
if (CurrentToken->is(tok::comma) &&
- Left->Type == TT_ArraySubscriptLSquare)
+ (Left->Type == TT_ArraySubscriptLSquare ||
+ Left->Type == TT_ObjCMethodExpr))
Left->Type = TT_ArrayInitializerLSquare;
updateParameterCount(Left, CurrentToken);
if (!consumeToken())
@@ -246,20 +247,12 @@
bool parseBrace() {
if (CurrentToken != NULL) {
- ScopedContextCreator ContextCreator(*this, tok::l_brace, 1);
FormatToken *Left = CurrentToken->Previous;
-
- FormatToken *Parent = Left->getPreviousNonComment();
- bool StartsObjCDictLiteral = Parent && Parent->is(tok::at);
- if (StartsObjCDictLiteral) {
- Contexts.back().ColonIsObjCDictLiteral = true;
- Left->Type = TT_ObjCDictLiteral;
- }
+ ScopedContextCreator ContextCreator(*this, tok::l_brace, 1);
+ Contexts.back().ColonIsDictLiteral = true;
while (CurrentToken != NULL) {
if (CurrentToken->is(tok::r_brace)) {
- if (StartsObjCDictLiteral)
- CurrentToken->Type = TT_ObjCDictLiteral;
Left->MatchingParen = CurrentToken;
CurrentToken->MatchingParen = Left;
next();
@@ -268,6 +261,8 @@
if (CurrentToken->isOneOf(tok::r_paren, tok::r_square))
return false;
updateParameterCount(Left, CurrentToken);
+ if (CurrentToken->is(tok::colon))
+ Left->Type = TT_DictLiteral;
if (!consumeToken())
return false;
}
@@ -329,8 +324,8 @@
// Colons from ?: are handled in parseConditional().
if (Tok->Previous->is(tok::r_paren) && Contexts.size() == 1) {
Tok->Type = TT_CtorInitializerColon;
- } else if (Contexts.back().ColonIsObjCDictLiteral) {
- Tok->Type = TT_ObjCDictLiteral;
+ } else if (Contexts.back().ColonIsDictLiteral) {
+ Tok->Type = TT_DictLiteral;
} else if (Contexts.back().ColonIsObjCMethodExpr ||
Line.First->Type == TT_ObjCMethodSpecifier) {
Tok->Type = TT_ObjCMethodExpr;
@@ -556,7 +551,7 @@
bool IsExpression)
: ContextKind(ContextKind), BindingStrength(BindingStrength),
LongestObjCSelectorName(0), ColonIsForRangeExpr(false),
- ColonIsObjCDictLiteral(false), ColonIsObjCMethodExpr(false),
+ ColonIsDictLiteral(false), ColonIsObjCMethodExpr(false),
FirstObjCSelectorName(NULL), FirstStartOfName(NULL),
IsExpression(IsExpression), CanBeExpression(true),
InCtorInitializer(false) {}
@@ -565,7 +560,7 @@
unsigned BindingStrength;
unsigned LongestObjCSelectorName;
bool ColonIsForRangeExpr;
- bool ColonIsObjCDictLiteral;
+ bool ColonIsDictLiteral;
bool ColonIsObjCMethodExpr;
FormatToken *FirstObjCSelectorName;
FormatToken *FirstStartOfName;
@@ -1411,10 +1406,10 @@
if (Right.Type == TT_StartOfName || Right.is(tok::kw_operator))
return true;
if (Right.is(tok::colon) &&
- (Right.Type == TT_ObjCDictLiteral || Right.Type == TT_ObjCMethodExpr))
+ (Right.Type == TT_DictLiteral || Right.Type == TT_ObjCMethodExpr))
return false;
if (Left.is(tok::colon) &&
- (Left.Type == TT_ObjCDictLiteral || Left.Type == TT_ObjCMethodExpr))
+ (Left.Type == TT_DictLiteral || Left.Type == TT_ObjCMethodExpr))
return true;
if (Right.Type == TT_ObjCSelectorName)
return true;