From: Daniel Jasper Date: Mon, 28 Jul 2014 12:24:21 +0000 (+0000) Subject: clang-format: Improve pointer/reference detection. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ad9a8589658719a4f8856eadeb86518891b33143;p=clang clang-format: Improve pointer/reference detection. Before (with left pointer alignment): void f(int i = 0, SomeType* *temps = NULL); After: void f(int i = 0, SomeType** temps = NULL); git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@214071 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 1ef9d1f6fe..6a7180bfb0 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -698,7 +698,8 @@ private: Previous = Previous->Previous) { if (Previous->isOneOf(tok::r_square, tok::r_paren)) Previous = Previous->MatchingParen; - if (Previous->Type == TT_BinaryOperator && + if ((Previous->Type == TT_BinaryOperator || + Previous->Type == TT_UnaryOperator) && Previous->isOneOf(tok::star, tok::amp)) { Previous->Type = TT_PointerOrReference; } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 6711447c8f..28bdf3293a 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -4080,13 +4080,13 @@ TEST_F(FormatTest, DeclarationsOfMultipleVariables) { // line. Also fix indent for breaking after the type, this looks bad. verifyFormat("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*\n" " aaaaaaaaaaaaaaaaaaaaaaaaaaaaa = aaaaaaaaaaaaaaaaaaa,\n" - " *b = bbbbbbbbbbbbbbbbbbb;", + " * b = bbbbbbbbbbbbbbbbbbb;", getGoogleStyle()); // Not ideal, but pointer-with-type does not allow much here. verifyGoogleFormat( - "aaaaaaaaa* a = aaaaaaaaaaaaaaaaaaa, *b = bbbbbbbbbbbbbbbbbbb,\n" - " *b = bbbbbbbbbbbbbbbbbbb, *d = ddddddddddddddddddd;"); + "aaaaaaaaa* a = aaaaaaaaaaaaaaaaaaa, * b = bbbbbbbbbbbbbbbbbbb,\n" + " * b = bbbbbbbbbbbbbbbbbbb, * d = ddddddddddddddddddd;"); } TEST_F(FormatTest, ConditionalExpressionsInBrackets) { @@ -4800,6 +4800,7 @@ TEST_F(FormatTest, UnderstandsUsesOfStarAndAmp) { verifyGoogleFormat("Type* t = x++ * y;"); verifyGoogleFormat( "const char* const p = reinterpret_cast(q);"); + verifyGoogleFormat("void f(int i = 0, SomeType** temps = NULL);"); verifyIndependentOfContext("a = *(x + y);"); verifyIndependentOfContext("a = &(x + y);");