From 52145d6f9c2beeef77c87eae37abccd9bb2300d0 Mon Sep 17 00:00:00 2001 From: Krasimir Georgiev Date: Mon, 14 May 2018 10:33:40 +0000 Subject: [PATCH] [clang-format] Continue after non-scope-closers in getLengthToMatchingParen Summary: This fixes a regression introduced by `r331857` where we stop the search for the End token as soon as we hit a non-scope-closer, which prematurely stops before semicolons for example, which should otherwise be considered as part of the unbreakable tail. Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D46824 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@332225 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Format/ContinuationIndenter.cpp | 4 +++- unittests/Format/FormatTestObjC.cpp | 12 ++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/Format/ContinuationIndenter.cpp b/lib/Format/ContinuationIndenter.cpp index 82e5f6e519..1d04ad0a49 100644 --- a/lib/Format/ContinuationIndenter.cpp +++ b/lib/Format/ContinuationIndenter.cpp @@ -90,8 +90,10 @@ static unsigned getLengthToMatchingParen(const FormatToken &Tok, return MatchingStackIndex >= 0 ? &Stack[MatchingStackIndex] : nullptr; }; for (; End->Next; End = End->Next) { - if (End->Next->CanBreakBefore || !End->Next->closesScope()) + if (End->Next->CanBreakBefore) break; + if (!End->Next->closesScope()) + continue; if (End->Next->MatchingParen->isOneOf(tok::l_brace, TT_ArrayInitializerLSquare, tok::less)) { diff --git a/unittests/Format/FormatTestObjC.cpp b/unittests/Format/FormatTestObjC.cpp index c6246fd502..459e522308 100644 --- a/unittests/Format/FormatTestObjC.cpp +++ b/unittests/Format/FormatTestObjC.cpp @@ -1142,6 +1142,18 @@ TEST_F(FormatTestObjC, ObjCArrayLiterals) { " @\"aaaaaaaaaaaaaaaaaaaaaaaaaa\"\n" "];\n"); } + +TEST_F(FormatTestObjC, BreaksCallStatementWhereSemiJustOverTheLimit) { + Style.ColumnLimit = 60; + // If the statement starting with 'a = ...' is put on a single line, the ';' + // is at line 61. + verifyFormat("int f(int a) {\n" + " a = [self aaaaaaaaaa:bbbbbbbbb\n" + " ccccccccc:dddddddd\n" + " ee:fddd];\n" + "}"); +} + } // end namespace } // end namespace format } // end namespace clang -- 2.40.0