r182849 - Add option to always break template declarations.
Daniel Jasper
djasper at google.com
Wed May 29 05:07:31 PDT 2013
Author: djasper
Date: Wed May 29 07:07:31 2013
New Revision: 182849
URL: http://llvm.org/viewvc/llvm-project?rev=182849&view=rev
Log:
Add option to always break template declarations.
With option enabled (e.g. in Google-style):
template <typename T>
void f() {}
With option disabled:
template <typename T> void f() {}
Enabling this for Google-style and Chromium-style, not sure which other
styles would prefer that.
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=182849&r1=182848&r2=182849&view=diff
==============================================================================
--- cfe/trunk/include/clang/Format/Format.h (original)
+++ cfe/trunk/include/clang/Format/Format.h Wed May 29 07:07:31 2013
@@ -100,6 +100,10 @@ struct FormatStyle {
/// \brief The number of characters to use for indentation.
unsigned IndentWidth;
+ /// \brief If \c true, always break after the \c template<...> of a template
+ /// declaration.
+ bool AlwaysBreakTemplateDeclarations;
+
/// \brief If true, \c IndentWidth consecutive spaces will be replaced with
/// tab characters.
bool UseTab;
@@ -128,6 +132,8 @@ struct FormatStyle {
R.AllowAllParametersOfDeclarationOnNextLine &&
AllowShortIfStatementsOnASingleLine ==
R.AllowShortIfStatementsOnASingleLine &&
+ AlwaysBreakTemplateDeclarations ==
+ R.AlwaysBreakTemplateDeclarations &&
BinPackParameters == R.BinPackParameters &&
BreakBeforeBraces == R.BreakBeforeBraces &&
ColumnLimit == R.ColumnLimit &&
@@ -143,8 +149,7 @@ struct FormatStyle {
PointerBindsToType == R.PointerBindsToType &&
SpacesBeforeTrailingComments == R.SpacesBeforeTrailingComments &&
SpacesInBracedLists == R.SpacesInBracedLists &&
- Standard == R.Standard &&
- UseTab == R.UseTab;
+ Standard == R.Standard && UseTab == R.UseTab;
}
};
Modified: cfe/trunk/lib/Format/Format.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Format/Format.cpp?rev=182849&r1=182848&r2=182849&view=diff
==============================================================================
--- cfe/trunk/lib/Format/Format.cpp (original)
+++ cfe/trunk/lib/Format/Format.cpp Wed May 29 07:07:31 2013
@@ -85,6 +85,8 @@ template <> struct MappingTraits<clang::
Style.AllowShortIfStatementsOnASingleLine);
IO.mapOptional("AllowShortLoopsOnASingleLine",
Style.AllowShortLoopsOnASingleLine);
+ IO.mapOptional("AlwaysBreakTemplateDeclarations",
+ Style.AlwaysBreakTemplateDeclarations);
IO.mapOptional("BinPackParameters", Style.BinPackParameters);
IO.mapOptional("ColumnLimit", Style.ColumnLimit);
IO.mapOptional("ConstructorInitializerAllOnOneLineOrOnePerLine",
@@ -120,6 +122,7 @@ FormatStyle getLLVMStyle() {
LLVMStyle.AllowAllParametersOfDeclarationOnNextLine = true;
LLVMStyle.AllowShortIfStatementsOnASingleLine = false;
LLVMStyle.AllowShortLoopsOnASingleLine = false;
+ LLVMStyle.AlwaysBreakTemplateDeclarations = false;
LLVMStyle.BinPackParameters = true;
LLVMStyle.ColumnLimit = 80;
LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false;
@@ -146,6 +149,7 @@ FormatStyle getGoogleStyle() {
GoogleStyle.AllowAllParametersOfDeclarationOnNextLine = true;
GoogleStyle.AllowShortIfStatementsOnASingleLine = true;
GoogleStyle.AllowShortLoopsOnASingleLine = true;
+ GoogleStyle.AlwaysBreakTemplateDeclarations = 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=182849&r1=182848&r2=182849&view=diff
==============================================================================
--- cfe/trunk/lib/Format/TokenAnnotator.cpp (original)
+++ cfe/trunk/lib/Format/TokenAnnotator.cpp Wed May 29 07:07:31 2013
@@ -922,6 +922,9 @@ void TokenAnnotator::calculateFormatting
Current->Parent->is(tok::string_literal) &&
Current->Children[0].is(tok::string_literal)) {
Current->MustBreakBefore = true;
+ } else if (Current->Parent->ClosesTemplateDeclaration &&
+ Style.AlwaysBreakTemplateDeclarations) {
+ 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=182849&r1=182848&r2=182849&view=diff
==============================================================================
--- cfe/trunk/unittests/Format/FormatTest.cpp (original)
+++ cfe/trunk/unittests/Format/FormatTest.cpp Wed May 29 07:07:31 2013
@@ -2774,6 +2774,16 @@ TEST_F(FormatTest, WrapsTemplateDeclarat
verifyFormat("a<aaaaaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaaaaa>(\n"
" a(aaaaaaaaaaaaaaaaaa, aaaaaaaaaaaaaaaa));");
+
+ verifyFormat("template <typename T> class C {\n};");
+ verifyFormat("template <typename T> void f();");
+ verifyFormat("template <typename T> void f() {}");
+
+ FormatStyle AlwaysBreak = getLLVMStyle();
+ AlwaysBreak.AlwaysBreakTemplateDeclarations = true;
+ verifyFormat("template <typename T>\nclass C {\n};", AlwaysBreak);
+ verifyFormat("template <typename T>\nvoid f();", AlwaysBreak);
+ verifyFormat("template <typename T>\nvoid f() {}", AlwaysBreak);
}
TEST_F(FormatTest, WrapsAtNestedNameSpecifiers) {
@@ -4646,6 +4656,7 @@ TEST_F(FormatTest, ParsesConfiguration)
CHECK_PARSE_BOOL(AllowAllParametersOfDeclarationOnNextLine);
CHECK_PARSE_BOOL(AllowShortIfStatementsOnASingleLine);
CHECK_PARSE_BOOL(AllowShortLoopsOnASingleLine);
+ CHECK_PARSE_BOOL(AlwaysBreakTemplateDeclarations);
CHECK_PARSE_BOOL(BinPackParameters);
CHECK_PARSE_BOOL(ConstructorInitializerAllOnOneLineOrOnePerLine);
CHECK_PARSE_BOOL(DerivePointerBinding);
More information about the cfe-commits
mailing list