diff options
author | Daniel Jasper <djasper@google.com> | 2013-05-15 09:35:08 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2013-05-15 09:35:08 +0000 |
commit | 33f4b90476f24d269cac04915d951d8f05bd3a77 (patch) | |
tree | 1377554c19bb1217e1bba8dd6e9db63ec27647d9 | |
parent | 9f3216199484a95fd765caa6555fd44e5c0ed1ea (diff) | |
download | clang-33f4b90476f24d269cac04915d951d8f05bd3a77.tar.gz clang-33f4b90476f24d269cac04915d951d8f05bd3a77.tar.bz2 clang-33f4b90476f24d269cac04915d951d8f05bd3a77.tar.xz |
Break function declarations after multi-line return types.
Before:
template <typename A>
SomeLoooooooooooooooooooooongType<
typename some_namespace::SomeOtherType<A>::Type> Function() {}
After:
template <typename A>
SomeLoooooooooooooooooooooongType<
typename some_namespace::SomeOtherType<A>::Type>
Function() {}
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@181877 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Format/Format.cpp | 7 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 6 |
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 99521ea8cc..9e882157aa 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -504,6 +504,8 @@ private: !State.Stack.back().AvoidBinPacking) || Previous.Type == TT_BinaryOperator) State.Stack.back().BreakBeforeParameter = false; + if (Previous.Type == TT_TemplateCloser && State.ParenLevel == 0) + State.Stack.back().BreakBeforeParameter = false; if (!DryRun) { unsigned NewLines = 1; @@ -531,6 +533,7 @@ private: } const AnnotatedToken *TokenBefore = Current.getPreviousNoneComment(); if (TokenBefore && !TokenBefore->isOneOf(tok::comma, tok::semi) && + TokenBefore->Type != TT_TemplateCloser && TokenBefore->Type != TT_BinaryOperator && !TokenBefore->opensScope()) State.Stack.back().BreakBeforeParameter = true; @@ -1017,6 +1020,10 @@ private: getRemainingLength(State) + State.Column > getColumnLimit() && State.ParenLevel < State.StartOfLineLevel) return true; + + if (Current.Type == TT_StartOfName && Line.MightBeFunctionDecl && + State.Stack.back().BreakBeforeParameter && State.ParenLevel == 0) + return true; return false; } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 69a007834c..20a32e740e 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -2002,7 +2002,7 @@ TEST_F(FormatTest, FormatsBuilderPattern) { " .StartsWith(\".eh_frame\", ORDER_EH_FRAME).StartsWith(\".init\", ORDER_INIT)\n" " .StartsWith(\".fini\", ORDER_FINI).StartsWith(\".hash\", ORDER_HASH)\n" " .Default(ORDER_TEXT);\n"); - + verifyFormat("return aaaaaaaaaaaaaaaaa->aaaaa().aaaaaaaaaaaaa().aaaaaa() <\n" " aaaaaaaaaaaaaaa->aaaaa().aaaaaaaaaaaaa().aaaaaa();"); verifyFormat( @@ -2835,6 +2835,10 @@ TEST_F(FormatTest, BreaksLongDeclarations) { " ReallyReallyLongParameterName,\n" " const SomeType<string, SomeOtherTemplateParameter> &\n" " AnotherLongParameterName) {}"); + verifyFormat("template <typename A>\n" + "SomeLoooooooooooooooooooooongType<\n" + " typename some_namespace::SomeOtherType<A>::Type>\n" + "Function() {}"); verifyFormat( "aaaaaaaaaaaaaaaa::aaaaaaaaaaaaaaaa<aaaaaaaaaaaaa, aaaaaaaaaaaa>\n" " aaaaaaaaaaaaaaaaaaaaaaa;"); |