forked from OSchip/llvm-project
Fix ClangFormat issue of recognizing ObjC subscript as C++ attributes when message target is a result of a C-style method.
Summary: The issue is that for array subscript like: ``` arr[[Foo() bar]]; ``` ClangFormat will recognize it as C++11 attribute syntax and put a space between 'arr' and first '[', like: ``` arr [[Foo() bar]]; ``` Now it is fixed. Tested with: ``` ninja FormatTests ``` Reviewers: benhamilton Reviewed By: benhamilton Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D54288 llvm-svn: 346566
This commit is contained in:
parent
6fddb53685
commit
e2d56dcc03
|
@ -366,7 +366,8 @@ private:
|
|||
// specifier parameter, although this is technically valid:
|
||||
// [[foo(:)]]
|
||||
if (AttrTok->is(tok::colon) ||
|
||||
AttrTok->startsSequence(tok::identifier, tok::identifier))
|
||||
AttrTok->startsSequence(tok::identifier, tok::identifier) ||
|
||||
AttrTok->startsSequence(tok::r_paren, tok::identifier))
|
||||
return false;
|
||||
if (AttrTok->is(tok::ellipsis))
|
||||
return true;
|
||||
|
|
|
@ -6472,6 +6472,8 @@ TEST_F(FormatTest, UnderstandsSquareAttributes) {
|
|||
// Make sure we do not mistake attributes for array subscripts.
|
||||
verifyFormat("int a() {}\n"
|
||||
"[[unused]] int b() {}\n");
|
||||
verifyFormat("NSArray *arr;\n"
|
||||
"arr[[Foo() bar]];");
|
||||
|
||||
// On the other hand, we still need to correctly find array subscripts.
|
||||
verifyFormat("int a = std::vector<int>{1, 2, 3}[0];");
|
||||
|
|
Loading…
Reference in New Issue