Hi djasper,

http://reviews.llvm.org/D6636

Files:
  docs/ClangFormatStyleOptions.rst
  include/clang/Format/Format.h
  lib/Format/ContinuationIndenter.cpp
  lib/Format/Format.cpp
  unittests/Format/FormatTest.cpp

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
Index: docs/ClangFormatStyleOptions.rst
===================================================================
--- docs/ClangFormatStyleOptions.rst
+++ docs/ClangFormatStyleOptions.rst
@@ -269,6 +269,10 @@
   Always break constructor initializers before commas and align
   the commas with the colon.
 
+**BreakSingleLineRawStrings** (``bool``)
+  Allow breaking single-line raw string literals. Multi-line string
+  literals are always left alone.
+
 **ColumnLimit** (``unsigned``)
   The column limit.
 
Index: include/clang/Format/Format.h
===================================================================
--- include/clang/Format/Format.h
+++ include/clang/Format/Format.h
@@ -278,6 +278,10 @@
   /// \brief If \c true, always break before multiline string literals.
   bool AlwaysBreakBeforeMultilineStrings;
 
+  /// \brief Allow breaking single-line raw string literals. Multi-line string
+  /// literals are always left alone.
+  bool BreakSingleLineRawStrings;
+
   /// \brief Different ways to use tab in formatting.
   enum UseTabStyle {
     /// Never use tab.
@@ -428,6 +432,7 @@
                R.AlwaysBreakTemplateDeclarations &&
            AlwaysBreakBeforeMultilineStrings ==
                R.AlwaysBreakBeforeMultilineStrings &&
+           BreakSingleLineRawStrings == R.BreakSingleLineRawStrings &&
            BinPackParameters == R.BinPackParameters &&
            BinPackArguments == R.BinPackArguments &&
            BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
Index: lib/Format/ContinuationIndenter.cpp
===================================================================
--- lib/Format/ContinuationIndenter.cpp
+++ lib/Format/ContinuationIndenter.cpp
@@ -1016,7 +1016,8 @@
           Text.startswith(Prefix = "u8\"") ||
           Text.startswith(Prefix = "L\""))) ||
         (Text.startswith(Prefix = "_T(\"") && Text.endswith(Postfix = "\")")) ||
-        getRawStringLiteralPrefixPostfix(Text, Prefix, Postfix)) {
+        (Style.BreakSingleLineRawStrings &&
+         getRawStringLiteralPrefixPostfix(Text, Prefix, Postfix))) {
       Token.reset(new BreakableStringLiteral(
           Current, State.Line->Level, StartColumn, Prefix, Postfix,
           State.Line->InPPDirective, Encoding, Style));
Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -200,6 +200,8 @@
                    Style.BreakBeforeTernaryOperators);
     IO.mapOptional("BreakConstructorInitializersBeforeComma",
                    Style.BreakConstructorInitializersBeforeComma);
+    IO.mapOptional("BreakSingleLineRawStrings",
+                   Style.BreakSingleLineRawStrings);
     IO.mapOptional("BinPackParameters", Style.BinPackParameters);
     IO.mapOptional("BinPackArguments", Style.BinPackArguments);
     IO.mapOptional("ColumnLimit", Style.ColumnLimit);
@@ -346,6 +348,7 @@
   LLVMStyle.BreakBeforeTernaryOperators = true;
   LLVMStyle.BreakBeforeBraces = FormatStyle::BS_Attach;
   LLVMStyle.BreakConstructorInitializersBeforeComma = false;
+  LLVMStyle.BreakSingleLineRawStrings = false;
   LLVMStyle.ColumnLimit = 80;
   LLVMStyle.CommentPragmas = "^ IWYU pragma:";
   LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false;
Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -7387,21 +7387,40 @@
 }
 
 TEST_F(FormatTest, BreaksRawStringLiterals) {
+  FormatStyle Style = getGoogleStyleWithColumns(15);
+  Style.BreakSingleLineRawStrings = true;
   EXPECT_EQ("R\"x(raw )x\"\n"
             "R\"x(literal)x\";",
-            format("R\"x(raw literal)x\";", getGoogleStyleWithColumns(15)));
+            format("R\"x(raw literal)x\";", Style));
+
+  Style.ColumnLimit = 16;
   EXPECT_EQ("uR\"x(raw )x\"\n"
             "uR\"x(literal)x\";",
-            format("uR\"x(raw literal)x\";", getGoogleStyleWithColumns(16)));
-  EXPECT_EQ("u8R\"x(raw )x\"\n"
-            "u8R\"x(literal)x\";",
-            format("u8R\"x(raw literal)x\";", getGoogleStyleWithColumns(17)));
+            format("uR\"x(raw literal)x\";", Style));
   EXPECT_EQ("LR\"x(raw )x\"\n"
             "LR\"x(literal)x\";",
-            format("LR\"x(raw literal)x\";", getGoogleStyleWithColumns(16)));
+            format("LR\"x(raw literal)x\";", Style));
   EXPECT_EQ("UR\"x(raw )x\"\n"
             "UR\"x(literal)x\";",
-            format("UR\"x(raw literal)x\";", getGoogleStyleWithColumns(16)));
+            format("UR\"x(raw literal)x\";", Style));
+
+  Style.ColumnLimit = 17;
+  EXPECT_EQ("u8R\"x(raw )x\"\n"
+            "u8R\"x(literal)x\";",
+            format("u8R\"x(raw literal)x\";", Style));
+
+  Style.BreakSingleLineRawStrings = false;
+  Style.ColumnLimit = 15;
+  EXPECT_EQ("R\"x(raw literal)x\";", format("R\"x(raw literal)x\";", Style));
+
+  Style.ColumnLimit = 16;
+  EXPECT_EQ("uR\"x(raw literal)x\";", format("uR\"x(raw literal)x\";", Style));
+  EXPECT_EQ("LR\"x(raw literal)x\";", format("LR\"x(raw literal)x\";", Style));
+  EXPECT_EQ("UR\"x(raw literal)x\";", format("UR\"x(raw literal)x\";", Style));
+
+  Style.ColumnLimit = 17;
+  EXPECT_EQ("u8R\"x(raw literal)x\";",
+            format("u8R\"x(raw literal)x\";", Style));
 }
 
 TEST_F(FormatTest, BreaksStringLiteralsWithin_TMacro) {
@@ -7592,9 +7611,11 @@
             format("\"test\\000000000001\"", getLLVMStyleWithColumns(10)));
   // FIXME: We probably don't need to care about escape sequences in raw
   // literals.
+  FormatStyle Style = getGoogleStyleWithColumns(7);
+  Style.BreakSingleLineRawStrings = true;
   EXPECT_EQ("R\"(\\x)\"\n"
             "R\"(\\x00)\"\n",
-            format("R\"(\\x\\x00)\"\n", getGoogleStyleWithColumns(7)));
+            format("R\"(\\x\\x00)\"\n", Style));
 }
 
 TEST_F(FormatTest, DoNotCreateUnreasonableUnwrappedLines) {
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to