diff options
author | Ben Hamilton <benhamilton@google.com> | 2019-02-08 15:55:18 +0000 |
---|---|---|
committer | Ben Hamilton <benhamilton@google.com> | 2019-02-08 15:55:18 +0000 |
commit | 30b7d09d7a3151118d6ee6dc8582a3eb87286ef4 (patch) | |
tree | afe7d8d43e47bd23bae036a663522446123acaf0 /clang/lib/Format/TokenAnnotator.cpp | |
parent | 494b8ac95a79031fc19266dea42d29e140444b47 (diff) | |
download | bcm5719-llvm-30b7d09d7a3151118d6ee6dc8582a3eb87286ef4.tar.gz bcm5719-llvm-30b7d09d7a3151118d6ee6dc8582a3eb87286ef4.zip |
[Format/ObjC] Fix [foo bar]->baz formatting as lambda arrow
Summary:
Currently, `UnwrappedLineParser` thinks an arrow token after
an ObjC method expression is a C++ lambda arrow, so it formats:
```
[foo bar]->baz
```
as:
```
[foo bar] -> baz
```
Because `UnwrappedLineParser` runs before `TokenAnnotator`, it can't
know if the arrow token is after an ObjC method expression or not.
This diff makes `TokenAnnotator` remove the TT_LambdaArrow on
the arrow token if it follows an ObjC method expression.
Test Plan: New test added. Ran test with:
% ninja FormatTests && ./tools/clang/unittests/Format/FormatTests
Confirmed test failed before diff and passed after diff.
Reviewers: krasimir, djasper, sammccall
Reviewed By: sammccall
Subscribers: cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D57923
llvm-svn: 353531
Diffstat (limited to 'clang/lib/Format/TokenAnnotator.cpp')
-rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 45896d86ad0..c7ddbf5926a 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -520,6 +520,10 @@ private: if (Parent && Parent->is(TT_PointerOrReference)) Parent->Type = TT_BinaryOperator; } + // An arrow after an ObjC method expression is not a lambda arrow. + if (CurrentToken->Type == TT_ObjCMethodExpr && CurrentToken->Next && + CurrentToken->Next->is(TT_LambdaArrow)) + CurrentToken->Next->Type = TT_Unknown; Left->MatchingParen = CurrentToken; CurrentToken->MatchingParen = Left; // FirstObjCSelectorName is set when a colon is found. This does |