Author: alexfh Date: Thu Jul 4 07:02:44 2013 New Revision: 185622 URL: http://llvm.org/viewvc/llvm-project?rev=185622&view=rev Log: Added AlwaysBreakBeforeMultilineStrings option.
Summary: Always breaking before multiline strings can help format complex expressions containing multiline strings more consistently, and avoid consuming too much horizontal space. Reviewers: djasper Reviewed By: djasper CC: cfe-commits, klimek Differential Revision: http://llvm-reviews.chandlerc.com/D1097 Modified: cfe/trunk/include/clang/Format/Format.h cfe/trunk/lib/Format/Format.cpp cfe/trunk/lib/Format/TokenAnnotator.cpp cfe/trunk/unittests/Format/FormatTest.cpp Modified: cfe/trunk/include/clang/Format/Format.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Format/Format.h?rev=185622&r1=185621&r2=185622&view=diff ============================================================================== --- cfe/trunk/include/clang/Format/Format.h (original) +++ cfe/trunk/include/clang/Format/Format.h Thu Jul 4 07:02:44 2013 @@ -110,6 +110,9 @@ struct FormatStyle { /// 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 @@ struct FormatStyle { R.AllowShortIfStatementsOnASingleLine && AlwaysBreakTemplateDeclarations == R.AlwaysBreakTemplateDeclarations && + AlwaysBreakBeforeMultilineStrings == + R.AlwaysBreakBeforeMultilineStrings && BinPackParameters == R.BinPackParameters && BreakBeforeBraces == R.BreakBeforeBraces && ColumnLimit == R.ColumnLimit && Modified: cfe/trunk/lib/Format/Format.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=185622&r1=185621&r2=185622&view=diff ============================================================================== --- cfe/trunk/lib/Format/Format.cpp (original) +++ cfe/trunk/lib/Format/Format.cpp Thu Jul 4 07:02:44 2013 @@ -87,6 +87,8 @@ template <> struct MappingTraits<clang:: 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 @@ FormatStyle getLLVMStyle() { 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 @@ FormatStyle getGoogleStyle() { GoogleStyle.AllowShortIfStatementsOnASingleLine = true; GoogleStyle.AllowShortLoopsOnASingleLine = true; GoogleStyle.AlwaysBreakTemplateDeclarations = true; + GoogleStyle.AlwaysBreakBeforeMultilineStrings = true; GoogleStyle.BinPackParameters = true; GoogleStyle.ColumnLimit = 80; GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true; Modified: cfe/trunk/lib/Format/TokenAnnotator.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/TokenAnnotator.cpp?rev=185622&r1=185621&r2=185622&view=diff ============================================================================== --- cfe/trunk/lib/Format/TokenAnnotator.cpp (original) +++ cfe/trunk/lib/Format/TokenAnnotator.cpp Thu Jul 4 07:02:44 2013 @@ -936,6 +936,13 @@ void TokenAnnotator::calculateFormatting } 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; } Modified: cfe/trunk/unittests/Format/FormatTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Format/FormatTest.cpp?rev=185622&r1=185621&r2=185622&view=diff ============================================================================== --- cfe/trunk/unittests/Format/FormatTest.cpp (original) +++ cfe/trunk/unittests/Format/FormatTest.cpp Thu Jul 4 07:02:44 2013 @@ -2878,6 +2878,34 @@ TEST_F(FormatTest, AlignsStringLiterals) " \"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" _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
