diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 10 | ||||
-rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 5 |
2 files changed, 11 insertions, 4 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 1f8ac5ee107..a8e2c5556a8 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -273,8 +273,16 @@ private: } if (CurrentToken->isOneOf(tok::r_paren, tok::r_brace)) return false; - if (CurrentToken->is(tok::colon)) + if (CurrentToken->is(tok::colon)) { + if (Left->Type == TT_ArraySubscriptLSquare) { + Left->Type = TT_ObjCMethodExpr; + StartsObjCMethodExpr = true; + Contexts.back().ColonIsObjCMethodExpr = true; + if (Parent && Parent->is(tok::r_paren)) + Parent->Type = TT_CastRParen; + } ColonFound = true; + } if (CurrentToken->is(tok::comma) && Style.Language != FormatStyle::LK_Proto && (Left->Type == TT_ArraySubscriptLSquare || diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 758e5042262..b195df4291c 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -6461,6 +6461,7 @@ TEST_F(FormatTest, FormatObjCMethodDeclarations) { TEST_F(FormatTest, FormatObjCMethodExpr) { verifyFormat("[foo bar:baz];"); verifyFormat("return [foo bar:baz];"); + verifyFormat("return (a)[foo bar:baz];"); verifyFormat("f([foo bar:baz]);"); verifyFormat("f(2, [foo bar:baz]);"); verifyFormat("f(2, a ? b : c);"); @@ -9137,10 +9138,8 @@ TEST_F(FormatTest, FormatsBlocks) { verifyFormat("foo(^{ bar(); });"); verifyFormat("foo(a, ^{ bar(); });"); - // FIXME: Make whitespace formatting consistent. Ask a ObjC dev how - // it would ideally look. verifyFormat("[operation setCompletionBlock:^{ [self onOperationDone]; }];"); - verifyFormat("int i = {[operation setCompletionBlock : ^{ [self " + verifyFormat("int i = {[operation setCompletionBlock:^{ [self " "onOperationDone]; }]};"); verifyFormat("[operation setCompletionBlock:^(int *i) { f(); }];"); verifyFormat("int a = [operation block:^int(int *i) { return 1; }];"); |