HomePhabricator

[clang-format] Fix ObjC style guesser to also iterate over child lines

Authored by benhamilton on Mar 22 2018, 10:37 AM.

Description

[clang-format] Fix ObjC style guesser to also iterate over child lines

Summary:
When I wrote ObjCHeaderStyleGuesser, I incorrectly assumed the
correct way to iterate over all tokens in AnnotatedLine was to
iterate over the linked list tokens starting with
AnnotatedLine::First.

However, AnnotatedLine also contains a vector
AnnotedLine::Children with child AnnotedLines which have their own
tokens which we need to iterate over.

Because I didn't iterate over the tokens in the children lines, the
ObjC style guesser would fail on syntax like:

#define FOO ({ NSString *s = ... })

as the statement(s) inside { ... } are child lines.

This fixes the bug and adds a test. I confirmed the test
failed before the fix, and passed after the fix.

Test Plan: New tests added. Ran tests with:

% make -j12 FormatTests && ./tools/clang/unittests/Format/FormatTests

Reviewers: djasper, jolesiak, Wizard

Reviewed By: djasper

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D44790

llvm-svn: 328220