]> granicus.if.org Git - clang/commitdiff
clang-format: Properly indent ObjC calls wrapped before first selector
authorDaniel Jasper <djasper@google.com>
Fri, 8 Nov 2013 02:08:01 +0000 (02:08 +0000)
committerDaniel Jasper <djasper@google.com>
Fri, 8 Nov 2013 02:08:01 +0000 (02:08 +0000)
Before:
  [self // break
      a:a
     aa:aa
  aaaaa:aaa];

After:
  [self // break
          a:a
         aa:aa
      aaaaa:aaa];

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@194241 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Format/ContinuationIndenter.cpp
unittests/Format/FormatTest.cpp

index 442f9fa85059aaf1644d6c4922542289b56820c4..d075c7482d06b6f44ca903ba8ec2d935e427dac3 100644 (file)
@@ -375,7 +375,11 @@ unsigned ContinuationIndenter::addTokenOnNewLine(LineState &State,
                State.Line->StartsDefinition))) {
     State.Column = State.Stack.back().Indent;
   } else if (Current.Type == TT_ObjCSelectorName) {
-    if (State.Stack.back().ColonPos > Current.ColumnWidth) {
+    if (State.Stack.back().ColonPos == 0) {
+      State.Stack.back().ColonPos =
+          State.Stack.back().Indent + Current.LongestObjCSelectorName;
+      State.Column = State.Stack.back().ColonPos - Current.ColumnWidth;
+    } else if (State.Stack.back().ColonPos > Current.ColumnWidth) {
       State.Column = State.Stack.back().ColonPos - Current.ColumnWidth;
     } else {
       State.Column = State.Stack.back().Indent;
index e6757c5d2a487edb32f9dcb8ad628f173198924b..776bf49a4aa8764e97c91d128c405c2ecea84f85 100644 (file)
@@ -5474,6 +5474,9 @@ TEST_F(FormatTest, FormatObjCMethodExpr) {
       "[self aaaaaaaaaaaaa:aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa,\n"
       "                    aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa,\n"
       "                    aaaaaaaaaaaaaaa, aaaaaaaaaaaaaaa];");
+  verifyFormat("[self // break\n"
+               "      a:a\n"
+               "    aaa:aaa];");
 }
 
 TEST_F(FormatTest, ObjCAt) {