Skip to content

Commit f48b5ab

Browse files
committed
clang-format: Improve ObjC variadic and binary expression parameters.
Before: [self aaaaaaaaaaaaaaa:aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa]; [self aaaaaaaaaaaaaaa:aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa]; After: [self aaaaaaaaaaaaaaa:aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa]; [self aaaaaaaaaaaaaaa:aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa]; This addresses llvm.org/PR15349 and llvm.org/PR16185. llvm-svn: 194214
1 parent 9ff62af commit f48b5ab

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

clang/lib/Format/ContinuationIndenter.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,8 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
499499
// is special cased.
500500
bool SkipFirstExtraIndent =
501501
(Previous && (Previous->opensScope() || Previous->is(tok::kw_return) ||
502-
Previous->getPrecedence() == prec::Assignment));
502+
Previous->getPrecedence() == prec::Assignment ||
503+
Previous->Type == TT_ObjCMethodExpr));
503504
for (SmallVectorImpl<prec::Level>::const_reverse_iterator
504505
I = Current.FakeLParens.rbegin(),
505506
E = Current.FakeLParens.rend();

clang/lib/Format/TokenAnnotator.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -871,8 +871,11 @@ class ExpressionParser {
871871

872872
/// \brief Parse expressions with the given operatore precedence.
873873
void parse(int Precedence = 0) {
874-
// Skip 'return' as it is not part of a binary expression.
875-
while (Current && Current->is(tok::kw_return))
874+
// Skip 'return' and ObjC selector colons as they are not part of a binary
875+
// expression.
876+
while (Current &&
877+
(Current->is(tok::kw_return) ||
878+
(Current->is(tok::colon) && Current->Type == TT_ObjCMethodExpr)))
876879
next();
877880

878881
if (Current == NULL || Precedence > PrecedenceArrowAndPeriod)
@@ -944,12 +947,11 @@ class ExpressionParser {
944947
if (Current) {
945948
if (Current->Type == TT_ConditionalExpr)
946949
return prec::Conditional;
947-
else if (Current->is(tok::semi) || Current->Type == TT_InlineASMColon)
950+
else if (Current->is(tok::semi) || Current->Type == TT_InlineASMColon ||
951+
Current->Type == TT_ObjCSelectorName)
948952
return 0;
949953
else if (Current->Type == TT_BinaryOperator || Current->is(tok::comma))
950954
return Current->getPrecedence();
951-
else if (Current->Type == TT_ObjCSelectorName)
952-
return prec::Assignment;
953955
else if (Current->isOneOf(tok::period, tok::arrow))
954956
return PrecedenceArrowAndPeriod;
955957
}

clang/unittests/Format/FormatTest.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5373,10 +5373,18 @@ TEST_F(FormatTest, FormatObjCMethodExpr) {
53735373
" aaaaaaaaaa:bbbbbbbbbbbbbbbbb\n"
53745374
" aaaaa:bbbbbbbbbbb + bbbbbbbbbbbb\n"
53755375
" aaaa:bbb];");
5376+
verifyFormat(
5377+
"[self aaaaaaaaaa:aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa |\n"
5378+
" aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa |\n"
5379+
" aaaaaaaaaaaaaaa | aaaaaaaaaaaaaaa];");
53765380

53775381
// Variadic parameters.
53785382
verifyFormat(
53795383
"NSArray *myStrings = [NSArray stringarray:@\"a\", @\"b\", nil];");
5384+
verifyFormat(
5385+
"[self aaaaaaaaaaaaa:aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa,\n"
5386+
" aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa,\n"
5387+
" aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa];");
53805388
}
53815389

53825390
TEST_F(FormatTest, ObjCAt) {

0 commit comments

Comments
 (0)