From: Alexander Kornienko Date: Wed, 19 Jun 2013 14:22:47 +0000 (+0000) Subject: Split long strings on word boundaries. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f2b2c7da1f3bfed9b0bb194ff00d6e1e43d68d5c;p=clang Split long strings on word boundaries. Summary: Split strings at word boundaries, when there are no spaces and slashes. Reviewers: klimek CC: cfe-commits Differential Revision: http://llvm-reviews.chandlerc.com/D1003 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@184304 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/BreakableToken.cpp b/lib/Format/BreakableToken.cpp index 48c1dee5bd..2b559cf8c3 100644 --- a/lib/Format/BreakableToken.cpp +++ b/lib/Format/BreakableToken.cpp @@ -77,6 +77,7 @@ BreakableToken::Split getStringSplit(StringRef Text, encoding::getCodePointCount(Text, Encoding) - 1); StringRef::size_type SpaceOffset = 0; StringRef::size_type SlashOffset = 0; + StringRef::size_type WordStartOffset = 0; StringRef::size_type SplitPoint = 0; for (unsigned Chars = 0;;) { unsigned Advance; @@ -95,6 +96,8 @@ BreakableToken::Split getStringSplit(StringRef Text, SpaceOffset = SplitPoint; if (Text[0] == '/') SlashOffset = SplitPoint; + if (Text[0] != '\\' && !isAlphanumeric(Text[0])) + WordStartOffset = SplitPoint; SplitPoint += Advance; Text = Text.substr(Advance); @@ -104,6 +107,8 @@ BreakableToken::Split getStringSplit(StringRef Text, return BreakableToken::Split(SpaceOffset + 1, 0); if (SlashOffset != 0) return BreakableToken::Split(SlashOffset + 1, 0); + if (WordStartOffset != 0) + return BreakableToken::Split(WordStartOffset + 1, 0); if (SplitPoint != 0) return BreakableToken::Split(SplitPoint, 0); return BreakableToken::Split(StringRef::npos, 0); diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 8454af32ed..15a5d6b574 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -4636,6 +4636,26 @@ TEST_F(FormatTest, BreakStringLiterals) { "\"slashes\"", format("\"split/pathat/slashes\"", getLLVMStyleWithColumns(10))); + EXPECT_EQ( + "\"split/\"\n" + "\"pathat/\"\n" + "\"slashes\"", + format("\"split/pathat/slashes\"", getLLVMStyleWithColumns(10))); + EXPECT_EQ("\"split at \"\n" + "\"spaces/at/\"\n" + "\"slashes.at.any$\"\n" + "\"non-alphanumeric%\"\n" + "\"1111111111characte\"\n" + "\"rs\"", + format("\"split at " + "spaces/at/" + "slashes.at." + "any$non-" + "alphanumeric%" + "1111111111characte" + "rs\"", + getLLVMStyleWithColumns(20))); + FormatStyle AlignLeft = getLLVMStyleWithColumns(12); AlignLeft.AlignEscapedNewlinesLeft = true; EXPECT_EQ(