From: Daniel Jasper Date: Wed, 9 Jul 2014 13:07:57 +0000 (+0000) Subject: clang-format: Fix behavior around pointer-to-member invocations. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fa308e31e827e1079248b123c9810f096a785a4e;p=clang clang-format: Fix behavior around pointer-to-member invocations. Before: (aaaaaaaaaa->* bbbbbbb)(aaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa)); After: (aaaaaaaaaa->*bbbbbbb)( aaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa)); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212617 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/FormatToken.h b/lib/Format/FormatToken.h index d83804e2e0..c376c50095 100644 --- a/lib/Format/FormatToken.h +++ b/lib/Format/FormatToken.h @@ -324,7 +324,7 @@ struct FormatToken { /// \brief Returns \c true if this is a "." or "->" accessing a member. bool isMemberAccess() const { - return isOneOf(tok::arrow, tok::period) && + return isOneOf(tok::arrow, tok::period, tok::arrowstar) && Type != TT_DesignatedInitializerPeriod; } diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 56aa384e74..afa9840619 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -1801,12 +1801,13 @@ bool TokenAnnotator::canBreakBefore(const AnnotatedLine &Line, return true; if (Left.Type == TT_ArrayInitializerLSquare) return true; - return (Left.isBinaryOperator() && Left.isNot(tok::lessless) && + return (Left.isBinaryOperator() && + !Left.isOneOf(tok::arrowstar, tok::lessless) && !Style.BreakBeforeBinaryOperators) || Left.isOneOf(tok::comma, tok::coloncolon, tok::semi, tok::l_brace, tok::kw_class, tok::kw_struct) || - Right.isOneOf(tok::lessless, tok::arrow, tok::period, tok::colon, - tok::l_square, tok::at) || + Right.isMemberAccess() || + Right.isOneOf(tok::lessless, tok::colon, tok::l_square, tok::at) || (Left.is(tok::r_paren) && Right.isOneOf(tok::identifier, tok::kw_const)) || (Left.is(tok::l_paren) && !Right.is(tok::r_paren)); diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 150497745b..16959690e0 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -4586,6 +4586,9 @@ TEST_F(FormatTest, UnderstandsPointersToMembers) { " (a->*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa)(\n" " aaaa, bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb);\n" "}"); + verifyFormat( + "(aaaaaaaaaa->*bbbbbbb)(\n" + " aaaaaaaaaaaaaaaaaaaaaaaaaaa(aaaaaaaaaaaaaaaaaaaaaaaaaaa));"); FormatStyle Style = getLLVMStyle(); Style.PointerAlignment = FormatStyle::PAS_Left; verifyFormat("typedef bool* (Class::*Member)() const;", Style);