forked from OSchip/llvm-project
[clang-format] Fix ObjC selectors with multiple params passed to macro
Summary: Objective-C selectors with arguments take the form of: foo: foo:bar: foo:bar:baz: These can be passed to a macro, like NS_SWIFT_NAME(): https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html and must never have spaces inserted around the colons. Previously, there was logic in TokenAnnotator's tok::colon parser to handle the single-argument case, but it failed for the multiple-argument cases. This diff fixes the bug and adds more tests. Test Plan: New tests added. Ran tests with: % make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests Reviewers: jolesiak, djasper, Wizard Reviewed By: jolesiak, Wizard Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D44638 llvm-svn: 327986
This commit is contained in:
parent
63cc8e96c3
commit
ad991868c1
|
@ -701,7 +701,8 @@ private:
|
|||
else
|
||||
Tok->Type = TT_InheritanceColon;
|
||||
} else if (Tok->Previous->is(tok::identifier) && Tok->Next &&
|
||||
Tok->Next->isOneOf(tok::r_paren, tok::comma)) {
|
||||
(Tok->Next->isOneOf(tok::r_paren, tok::comma) ||
|
||||
Tok->Next->startsSequence(tok::identifier, tok::colon))) {
|
||||
// This handles a special macro in ObjC code where selectors including
|
||||
// the colon are passed as macro arguments.
|
||||
Tok->Type = TT_ObjCMethodExpr;
|
||||
|
|
|
@ -618,6 +618,9 @@ TEST_F(FormatTestObjC, FormatObjCMethodExpr) {
|
|||
verifyFormat("for (id foo in [self getStuffFor:bla]) {\n"
|
||||
"}");
|
||||
verifyFormat("[self aaaaa:MACRO(a, b:, c:)];");
|
||||
verifyFormat("[self aaaaa:MACRO(a, b:c:, d:e:)];");
|
||||
verifyFormat("[self aaaaa:MACRO(a, b:c:d:, e:f:g:)];");
|
||||
verifyFormat("int XYMyFoo(int a, int b) NS_SWIFT_NAME(foo(self:scale:));");
|
||||
verifyFormat("[self aaaaa:(1 + 2) bbbbb:3];");
|
||||
verifyFormat("[self aaaaa:(Type)a bbbbb:3];");
|
||||
|
||||
|
|
Loading…
Reference in New Issue