The following C++ code was being detected by
guessLanguage() as Objective-C:
#define FOO(...) auto bar =  __VA_ARGS__;
This was because  __VA_ARGS__ is not currently detected as a C++
lambda expression (it has no parens or braces), so
TokenAnnotator::parseSquare() incorrectly treats the opening square
as an ObjC method expression.
We have two options to fix this:
- Parse  __VA_ARGS__ explicitly as a C++ lambda
- Make it so  is never parsed as an Objective-C method expression
This diff implements option 2, which causes the [ to be parsed
as TT_ArraySubscriptLSquare instead of TT_ObjCMethodExpr.
Note that when I fixed this, it caused one change in formatting
behavior, where the following was implicitly relying on the [
being parsed as TT_ObjCMethodExpr:
A<int * > a;
A<int *> a;
with Style.PointerAlignment = Middle.
I don't really know what the desired format is for this syntax; the
test was added by Janusz Sobczak and integrated by @djasper in
I went ahead and changed the test for now.
Test Plan: New tests added. Ran tests with:
% make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests