[PATCH] Added AlwaysBreakBeforeMultilineStrings option.
Alexander Kornienko
alexfh at google.com
Thu Jul 4 03:19:11 PDT 2013
Hi djasper,
Always breaking before multiline strings can help format complex
expressions containing multiline strings more consistently, and avoid consuming
too much horizontal space.
http://llvm-reviews.chandlerc.com/D1097
Files:
include/clang/Format/Format.h
lib/Format/Format.cpp
lib/Format/TokenAnnotator.cpp
unittests/Format/FormatTest.cpp
Index: include/clang/Format/Format.h
===================================================================
--- include/clang/Format/Format.h
+++ include/clang/Format/Format.h
@@ -110,6 +110,9 @@
/// declaration.
bool AlwaysBreakTemplateDeclarations;
+ /// \brief If \c true, always break before multiline string literals.
+ bool AlwaysBreakBeforeMultilineStrings;
+
/// \brief If true, \c IndentWidth consecutive spaces will be replaced with
/// tab characters.
bool UseTab;
@@ -144,6 +147,8 @@
R.AllowShortIfStatementsOnASingleLine &&
AlwaysBreakTemplateDeclarations ==
R.AlwaysBreakTemplateDeclarations &&
+ AlwaysBreakBeforeMultilineStrings ==
+ R.AlwaysBreakBeforeMultilineStrings &&
BinPackParameters == R.BinPackParameters &&
BreakBeforeBraces == R.BreakBeforeBraces &&
ColumnLimit == R.ColumnLimit &&
Index: lib/Format/Format.cpp
===================================================================
--- lib/Format/Format.cpp
+++ lib/Format/Format.cpp
@@ -87,6 +87,8 @@
Style.AllowShortLoopsOnASingleLine);
IO.mapOptional("AlwaysBreakTemplateDeclarations",
Style.AlwaysBreakTemplateDeclarations);
+ IO.mapOptional("AlwaysBreakBeforeMultilineStrings",
+ Style.AlwaysBreakBeforeMultilineStrings);
IO.mapOptional("BinPackParameters", Style.BinPackParameters);
IO.mapOptional("ColumnLimit", Style.ColumnLimit);
IO.mapOptional("ConstructorInitializerAllOnOneLineOrOnePerLine",
@@ -127,6 +129,7 @@
LLVMStyle.AllowShortIfStatementsOnASingleLine = false;
LLVMStyle.AllowShortLoopsOnASingleLine = false;
LLVMStyle.AlwaysBreakTemplateDeclarations = false;
+ LLVMStyle.AlwaysBreakBeforeMultilineStrings = false;
LLVMStyle.BinPackParameters = true;
LLVMStyle.ColumnLimit = 80;
LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false;
@@ -157,6 +160,7 @@
GoogleStyle.AllowShortIfStatementsOnASingleLine = true;
GoogleStyle.AllowShortLoopsOnASingleLine = true;
GoogleStyle.AlwaysBreakTemplateDeclarations = true;
+ GoogleStyle.AlwaysBreakBeforeMultilineStrings = true;
GoogleStyle.BinPackParameters = true;
GoogleStyle.ColumnLimit = 80;
GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
Index: lib/Format/TokenAnnotator.cpp
===================================================================
--- lib/Format/TokenAnnotator.cpp
+++ lib/Format/TokenAnnotator.cpp
@@ -936,6 +936,13 @@
} else if (Current->Previous->ClosesTemplateDeclaration &&
Style.AlwaysBreakTemplateDeclarations) {
Current->MustBreakBefore = true;
+ } else if (Style.AlwaysBreakBeforeMultilineStrings &&
+ Current->is(tok::string_literal) &&
+ Current->Previous->isNot(tok::lessless) &&
+ Current->Previous->Type != TT_InlineASMColon &&
+ Current->getNextNoneComment() &&
+ Current->getNextNoneComment()->is(tok::string_literal)) {
+ Current->MustBreakBefore = true;
} else {
Current->MustBreakBefore = false;
}
Index: unittests/Format/FormatTest.cpp
===================================================================
--- unittests/Format/FormatTest.cpp
+++ unittests/Format/FormatTest.cpp
@@ -2878,6 +2878,34 @@
" \"jkl\");");
}
+TEST_F(FormatTest, AlwaysBreakBeforeMultilineStrings) {
+ FormatStyle NoBreak = getLLVMStyle();
+ NoBreak.AlwaysBreakBeforeMultilineStrings = false;
+ FormatStyle Break = getLLVMStyle();
+ Break.AlwaysBreakBeforeMultilineStrings = true;
+ EXPECT_EQ("aaaa = \"bbbb\"\n"
+ " \"cccc\";",
+ format("aaaa=\"bbbb\" \"cccc\";", NoBreak));
+ EXPECT_EQ("aaaa =\n"
+ " \"bbbb\"\n"
+ " \"cccc\";",
+ format("aaaa=\"bbbb\" \"cccc\";", Break));
+ EXPECT_EQ("aaaa(\"bbbb\"\n"
+ " \"cccc\");",
+ format("aaaa(\"bbbb\" \"cccc\");", NoBreak));
+ EXPECT_EQ("aaaa(\n"
+ " \"bbbb\"\n"
+ " \"cccc\");",
+ format("aaaa(\"bbbb\" \"cccc\");", Break));
+ EXPECT_EQ("aaaa(qqq, \"bbbb\"\n"
+ " \"cccc\");",
+ format("aaaa(qqq, \"bbbb\" \"cccc\");", NoBreak));
+ EXPECT_EQ("aaaa(qqq,\n"
+ " \"bbbb\"\n"
+ " \"cccc\");",
+ format("aaaa(qqq, \"bbbb\" \"cccc\");", Break));
+}
+
TEST_F(FormatTest, AlignsPipes) {
verifyFormat(
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n"
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D1097.1.patch
Type: text/x-patch
Size: 4588 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130704/c20e1b3b/attachment.bin>
More information about the cfe-commits
mailing list