aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jasper <djasper@google.com>2013-01-28 15:40:20 +0000
committerDaniel Jasper <djasper@google.com>2013-01-28 15:40:20 +0000
commitd75ff6496bfb599a9edde41681873919d4d44152 (patch)
treeb04a8d7e2691bc7ebf85803d5123a65b8489c787
parentb7551f71a4c5a901bbae72b0a80af3745b7a0c0d (diff)
Don't put a function's return type on its own line in Google style.
This would be against the style guide: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml?showone=Function_Declarations_and_Definitions#Function_Declarations_and_Definitions Not sure what to do as a last resort if the function signature does not fit onto a single line in Google style .. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173690 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Format/Format.h3
-rw-r--r--lib/Format/Format.cpp4
-rw-r--r--unittests/Format/FormatTest.cpp3
3 files changed, 9 insertions, 1 deletions
diff --git a/include/clang/Format/Format.h b/include/clang/Format/Format.h
index 78523ea36e..b21bfd2524 100644
--- a/include/clang/Format/Format.h
+++ b/include/clang/Format/Format.h
@@ -65,6 +65,9 @@ struct FormatStyle {
/// the next line without calling this bin-packing.
bool AllowAllParametersOnNextLine;
+ /// \brief Allow putting the return type of a function onto its own line.
+ bool AllowReturnTypeOnItsOwnLine;
+
/// \brief If the constructor initializers don't fit on a line, put each
/// initializer on its own line.
bool ConstructorInitializerAllOnOneLineOrOnePerLine;
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp
index 3b5dfc1abd..2199781735 100644
--- a/lib/Format/Format.cpp
+++ b/lib/Format/Format.cpp
@@ -176,6 +176,7 @@ FormatStyle getLLVMStyle() {
LLVMStyle.SpacesBeforeTrailingComments = 1;
LLVMStyle.BinPackParameters = true;
LLVMStyle.AllowAllParametersOnNextLine = true;
+ LLVMStyle.AllowReturnTypeOnItsOwnLine = true;
LLVMStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = false;
LLVMStyle.AllowShortIfStatementsOnASingleLine = false;
LLVMStyle.ObjCSpaceBeforeProtocolList = true;
@@ -193,6 +194,7 @@ FormatStyle getGoogleStyle() {
GoogleStyle.SpacesBeforeTrailingComments = 2;
GoogleStyle.BinPackParameters = false;
GoogleStyle.AllowAllParametersOnNextLine = true;
+ GoogleStyle.AllowReturnTypeOnItsOwnLine = false;
GoogleStyle.ConstructorInitializerAllOnOneLineOrOnePerLine = true;
GoogleStyle.AllowShortIfStatementsOnASingleLine = false;
GoogleStyle.ObjCSpaceBeforeProtocolList = false;
@@ -1628,7 +1630,7 @@ private:
// Don't break at ':' if identifier before it can beak.
return false;
}
- if (Right.Type == TT_StartOfName)
+ if (Right.Type == TT_StartOfName && Style.AllowReturnTypeOnItsOwnLine)
return true;
if (Right.is(tok::colon) && Right.Type == TT_ObjCMethodExpr)
return false;
diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp
index 6b9b84de26..bdc5f9a5c5 100644
--- a/unittests/Format/FormatTest.cpp
+++ b/unittests/Format/FormatTest.cpp
@@ -1511,6 +1511,9 @@ TEST_F(FormatTest, BreaksFunctionDeclarations) {
"TypeSpecDecl *\n"
"TypeSpecDecl::Create(ASTContext &C, DeclContext *DC, SourceLocation L,\n"
" IdentifierIn *II, Type *T) {\n}");
+ verifyGoogleFormat(
+ "TypeSpecDecl* TypeSpecDecl::Create(\n"
+ " ASTContext& C, DeclContext* DC, SourceLocation L) {\n}");
}
TEST_F(FormatTest, LineStartsWithSpecialCharacter) {