diff options
-rw-r--r-- | lib/Format/Format.cpp | 17 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 13 |
2 files changed, 28 insertions, 2 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 625f93151f..aca5d36aef 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -284,6 +284,7 @@ public: State.VariablePos = 0; State.LineContainsContinuedForLoopSection = false; State.ParenLevel = 0; + State.StartOfStringLiteral = 0; State.StartOfLineLevel = State.ParenLevel; DEBUG({ @@ -421,6 +422,10 @@ private: /// \brief The \c ParenLevel at the start of this line. unsigned StartOfLineLevel; + /// \brief The start column of the string literal, if we're in a string + /// literal sequence, 0 otherwise. + unsigned StartOfStringLiteral; + /// \brief A stack keeping track of properties applying to parenthesis /// levels. std::vector<ParenState> Stack; @@ -440,6 +445,8 @@ private: return ParenLevel < Other.ParenLevel; if (StartOfLineLevel != Other.StartOfLineLevel) return StartOfLineLevel < Other.StartOfLineLevel; + if (StartOfStringLiteral != Other.StartOfStringLiteral) + return StartOfStringLiteral < Other.StartOfStringLiteral; return Stack < Other.Stack; } }; @@ -472,8 +479,8 @@ private: if (Current.is(tok::r_brace)) { State.Column = Line.Level * 2; } else if (Current.is(tok::string_literal) && - Previous.is(tok::string_literal)) { - State.Column = State.Column - Previous.FormatTok.TokenLength; + State.StartOfStringLiteral != 0) { + State.Column = State.StartOfStringLiteral; State.Stack.back().BreakBeforeParameter = true; } else if (Current.is(tok::lessless) && State.Stack.back().FirstLessLess != 0) { @@ -685,6 +692,12 @@ private: State.Stack.pop_back(); } + if (Current.is(tok::string_literal) && State.StartOfStringLiteral == 0) { + State.StartOfStringLiteral = State.Column; + } else if (Current.isNot(tok::comment)) { + State.StartOfStringLiteral = 0; + } + State.Column += Current.FormatTok.TokenLength; if (State.NextToken->Children.empty()) diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index dba6183e09..ab4825b314 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -1439,6 +1439,19 @@ TEST_F(FormatTest, AlignsStringLiterals) { verifyFormat("someFunction(\"Always break between multi-line\"\n" " \" string literals\",\n" " and, other, parameters);"); + EXPECT_EQ("fun + \"1243\" /* comment */\n" + " \"5678\";", + format("fun + \"1243\" /* comment */\n" + " \"5678\";", + getLLVMStyleWithColumns(28))); + EXPECT_EQ( + "aaaaaa = \"aaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa \"\n" + " \"aaaaaaaaaaaaaaaaaaaaa\"\n" + " \"aaaaaaaaaaaaaaaa\";", + format("aaaaaa =" + "\"aaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaa " + "aaaaaaaaaaaaaaaaaaaaa\" " + "\"aaaaaaaaaaaaaaaa\";")); } TEST_F(FormatTest, AlignsPipes) { |