Please take a close look at this CL. I haven't touched much of
UnwrappedLineParser before, so I may have gotten things wrong.
Previously, clang-format would incorrectly format the following:
@implementation Foo - (Class)class { } - (void)foo { } @end
as:
@implementation Foo - (Class)class { } - (void)foo { } @end
The problem is whenever UnwrappedLineParser::parseStructuralElement()
sees any of the keywords class, struct, or enum, it calls
parseRecord() to parse them as a C/C++ record.
This causes subsequent lines to be parsed incorrectly, which
causes them to be indented incorrectly.
In Objective-C/Objective-C++, these keywords are valid selector
components.
This diff fixes the issue by explicitly handling + and - lines
inside @implementation / @interface / @protocol blocks
and parsing them as Objective-C methods.
Test Plan: New tests added. Ran tests with:
make -j16 FormatTests && ./tools/clang/unittests/Format/FormatTests
tok::r_brace could be skiped - see comment to line 2143.