From: Daniel Jasper Date: Mon, 28 Jul 2014 12:24:21 +0000 (+0000) Subject: clang-format: Improve pointer/reference detection. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8184d66f4b98d779abb5dd5564fb14157b5949d6;p=platform%2Fupstream%2Fllvm.git 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); llvm-svn: 214071 --- diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 1ef9d1f..6a7180b 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/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/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 6711447..28bdf32 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/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);");