From af31fd7021e685280da9155e5017f1053b05fdf8 Mon Sep 17 00:00:00 2001 From: Manuel Klimek Date: Fri, 1 Mar 2013 13:14:08 +0000 Subject: [PATCH] Implement fallback split point for string literals. If we don't find a natural split point (currently space) in a string literal protruding over the line, we just split at the last possible point. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@176349 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/Format.cpp | 9 +++++++-- unittests/Format/FormatTest.cpp | 9 ++++++++- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 4aaae844fc..d2b12f6814 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -720,6 +720,8 @@ private: while (StartColumn + TailLength > getColumnLimit()) { StringRef Text = StringRef(Current.FormatTok.Tok.getLiteralData() + TailOffset, TailLength); + if (StartColumn + 1 > getColumnLimit()) + break; StringRef::size_type SplitPoint = getSplitPoint(Text, getColumnLimit() - StartColumn - 1); if (SplitPoint == StringRef::npos) @@ -748,8 +750,11 @@ private: StringRef::size_type getSplitPoint(StringRef Text, StringRef::size_type Offset) { - // FIXME: Implement more sophisticated splitting mechanism, and a fallback. - return Text.rfind(' ', Offset); + StringRef::size_type SpaceOffset = Text.rfind(' ', Offset); + if (SpaceOffset == StringRef::npos && Offset > 0) { + return Offset - 1; + } + return SpaceOffset; } unsigned getColumnLimit() { diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index baeb0143bc..8cc81684cb 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -3003,7 +3003,8 @@ TEST_F(FormatTest, BreakStringLiterals) { EXPECT_EQ("\"some \"\n" "\"text\"", format("\"some text\"", getLLVMStyleWithColumns(7))); - EXPECT_EQ("\"some text\"", + EXPECT_EQ("\"some\"\n" + "\" text\"", format("\"some text\"", getLLVMStyleWithColumns(6))); EXPECT_EQ("variable =\n" @@ -3041,6 +3042,12 @@ TEST_F(FormatTest, BreakStringLiterals) { "aaaaaaaaaaaaaaaaaaaa(\n" " aaaaaaaaaaaaaaaaaaaa,\n" " aaaaaa(\"aaa aaaaa aaa aaa aaaaa aaa aaaaa aaa aaa aaaaaa\"));"); + + EXPECT_EQ( + "\"splitmea\"\n" + "\"trandompo\"\n" + "\"int\"", + format("\"splitmeatrandompoint\"", getLLVMStyleWithColumns(10))); } } // end namespace tooling -- 2.40.0