diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 3 | ||||
| -rw-r--r-- | clang/unittests/Format/FormatTest.cpp | 22 |
2 files changed, 16 insertions, 9 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index db17135a0c7..f9b795ece90 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1052,7 +1052,10 @@ void TokenAnnotator::calculateFormattingInformation(AnnotatedLine &Line) { Current->Next->is(tok::string_literal)) { Current->MustBreakBefore = true; } else if (Current->Previous->ClosesTemplateDeclaration && + Current->Previous->MatchingParen && + Current->Previous->MatchingParen->BindingStrength == 1 && Style.AlwaysBreakTemplateDeclarations) { + // FIXME: Fix horrible hack of using BindingStrength to find top-level <>. Current->MustBreakBefore = true; } else if (Current->Type == TT_CtorInitializerComma && Style.BreakConstructorInitializersBeforeComma) { diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 6d504c0c786..020f4480330 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -3519,15 +3519,6 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { verifyFormat("template <typename T> class C {};"); verifyFormat("template <typename T> void f();"); verifyFormat("template <typename T> void f() {}"); - - FormatStyle AlwaysBreak = getLLVMStyle(); - AlwaysBreak.AlwaysBreakTemplateDeclarations = true; - verifyFormat("template <typename T>\nclass C {};", AlwaysBreak); - verifyFormat("template <typename T>\nvoid f();", AlwaysBreak); - verifyFormat("template <typename T>\nvoid f() {}", AlwaysBreak); - verifyFormat("void aaaaaaaaaaaaaaaaaaa<aaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" - " bbbbbbbbbbbbbbbbbbbbbbbbbbbb>(\n" - " ccccccccccccccccccccccccccccccccccccccccccccccc);"); verifyFormat( "aaaaaaaaaaaaa<aaaaaaaaaa, aaaaaaaaaaa,\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" @@ -3537,6 +3528,19 @@ TEST_F(FormatTest, WrapsTemplateDeclarations) { " aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>(\n" " bbbbbbbbbbbbbbbbbbbbbbbb);", getLLVMStyleWithColumns(72)); + + FormatStyle AlwaysBreak = getLLVMStyle(); + AlwaysBreak.AlwaysBreakTemplateDeclarations = true; + verifyFormat("template <typename T>\nclass C {};", AlwaysBreak); + verifyFormat("template <typename T>\nvoid f();", AlwaysBreak); + verifyFormat("template <typename T>\nvoid f() {}", AlwaysBreak); + verifyFormat("void aaaaaaaaaaaaaaaaaaa<aaaaaaaaaaaaaaaaaaaaaaaaaaaaa,\n" + " bbbbbbbbbbbbbbbbbbbbbbbbbbbb>(\n" + " ccccccccccccccccccccccccccccccccccccccccccccccc);"); + verifyFormat("template <template <typename> class Fooooooo,\n" + " template <typename> class Baaaaaaar>\n" + "struct C {};", + AlwaysBreak); } TEST_F(FormatTest, WrapsAtNestedNameSpecifiers) { |

