]> granicus.if.org Git - clang/commitdiff
clang-format: Properly align ObjC string literals.
authorDaniel Jasper <djasper@google.com>
Sun, 17 May 2015 08:13:23 +0000 (08:13 +0000)
committerDaniel Jasper <djasper@google.com>
Sun, 17 May 2015 08:13:23 +0000 (08:13 +0000)
Before:
  NSString s = @"a"
               "b"
               "c";
  NSString s = @"a"
               @"b"
                @"c";

After:
  NSString s = @"a"
                "b"
                "c";
  NSString s = @"a"
               @"b"
               @"c";

This fixes llvm.org/PR23536.

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

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

index 720b6140b2fad40777823e1ed2ffad0a6d1e236d..3baebed56792304b9d38d84562799a7ed3a5467b 100644 (file)
@@ -546,10 +546,11 @@ unsigned ContinuationIndenter::getNewLineColumn(const LineState &State) {
   if (Current.is(tok::identifier) && Current.Next &&
       Current.Next->is(TT_DictLiteral))
     return State.Stack.back().Indent;
-  if ((NextNonComment->isStringLiteral() ||
-       NextNonComment->is(TT_ObjCStringLiteral)) &&
-      State.StartOfStringLiteral != 0)
+  if (NextNonComment->isStringLiteral() && State.StartOfStringLiteral != 0)
     return State.StartOfStringLiteral;
+  if (NextNonComment->is(TT_ObjCStringLiteral) &&
+      State.StartOfStringLiteral != 0)
+    return State.StartOfStringLiteral - 1;
   if (NextNonComment->is(tok::lessless) &&
       State.Stack.back().FirstLessLess != 0)
     return State.Stack.back().FirstLessLess;
@@ -702,13 +703,13 @@ unsigned ContinuationIndenter::moveStateToNextToken(LineState &State,
   moveStatePastScopeCloser(State);
   moveStatePastFakeRParens(State);
 
-  if ((Current.isStringLiteral() || Current.is(TT_ObjCStringLiteral)) &&
-      State.StartOfStringLiteral == 0) {
+  if (Current.isStringLiteral() && State.StartOfStringLiteral == 0)
     State.StartOfStringLiteral = State.Column;
-  } else if (!Current.isOneOf(tok::comment, tok::identifier, tok::hash) &&
-             !Current.isStringLiteral()) {
+  if (Current.is(TT_ObjCStringLiteral) && State.StartOfStringLiteral == 0)
+    State.StartOfStringLiteral = State.Column + 1;
+  else if (!Current.isOneOf(tok::comment, tok::identifier, tok::hash) &&
+             !Current.isStringLiteral())
     State.StartOfStringLiteral = 0;
-  }
 
   State.Column += Current.ColumnWidth;
   State.NextToken = State.NextToken->Next;
index f3a875b095258628109a2a6c449fd619a7176d21..f7510c86189cfbd8f96d1a4dd6b15efd6beecff9 100644 (file)
@@ -4768,7 +4768,11 @@ TEST_F(FormatTest, AlignsStringLiterals) {
   verifyFormat("f(@\"a\"\n"
                "  @\"b\");");
   verifyFormat("NSString s = @\"a\"\n"
-               "             @\"b\";");
+               "             @\"b\"\n"
+               "             @\"c\";");
+  verifyFormat("NSString s = @\"a\"\n"
+               "              \"b\"\n"
+               "              \"c\";");
 }
 
 TEST_F(FormatTest, AlwaysBreakAfterDefinitionReturnType) {