Index: lib/Format/TokenAnnotator.cpp =================================================================== --- lib/Format/TokenAnnotator.cpp +++ lib/Format/TokenAnnotator.cpp @@ -1745,9 +1745,14 @@ // In Objective-C method expressions, prefer breaking before "param:" over // breaking after it. - if (Right.is(TT_SelectorName)) + if (Right.is(TT_SelectorName)) { + // While we prefer breaking before param, if this is the first paramater + // apply PenaltyBreakBeforeFirstCallParameter + if(Left.is(tok::identifier) && Left.Previous && Left.Previous->is(tok::l_square)) { + return Style.PenaltyBreakBeforeFirstCallParameter; + } return 0; - if (Left.is(tok::colon) && Left.is(TT_ObjCMethodExpr)) + } if (Left.is(tok::colon) && Left.is(TT_ObjCMethodExpr)) return Line.MightBeFunctionDecl ? 50 : 500; if (Left.is(tok::l_paren) && InFunctionDecl && Style.AlignAfterOpenBracket) Index: unittests/Format/FormatTest.cpp =================================================================== --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -7323,6 +7323,14 @@ " aaa:aaa];"); verifyFormat("bool a = ([aaaaaaaa aaaaa] == aaaaaaaaaaaaaaaaa ||\n" " [aaaaaaaa aaaaa] == aaaaaaaaaaaaaaaaaaaa);"); + + // Allow PenaltyBreakBeforeFirstCallParameter to stop us from breaking before + // the first selector name. + FormatStyle selectorBreakStyle = getGoogleStyleWithColumns(60); + selectorBreakStyle.PenaltyBreakBeforeFirstCallParameter = 10000; + verifyFormat("[self function1:[OtherType function2:longParamaterName1\n" + " param:longParameterName2]];", + selectorBreakStyle); } TEST_F(FormatTest, ObjCAt) {