diff options
author | Daniel Jasper <djasper@google.com> | 2012-12-05 07:51:39 +0000 |
---|---|---|
committer | Daniel Jasper <djasper@google.com> | 2012-12-05 07:51:39 +0000 |
commit | 112fb27ab48ae3256173806a073ba7b88aa6531a (patch) | |
tree | 18c48bfe7063c6b9709739a5e0332a0dbd403189 | |
parent | ac31c8346f1ce3628b5a7fb862fefab5b94f8e82 (diff) |
Small tweaks to automatic formatting.
Recognize '!=' as a binary operator and assume that there are no
type definitions on the RHS of an assignment.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169363 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Format/Format.cpp | 15 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 10 |
2 files changed, 20 insertions, 5 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index d928aa9580..22805f691e 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -547,12 +547,16 @@ public: private: void determineTokenTypes() { + bool EqualEncountered = false; for (int i = 0, e = Line.Tokens.size(); i != e; ++i) { TokenAnnotation &Annotation = Annotations[i]; const FormatToken &Tok = Line.Tokens[i]; + if (Tok.Tok.is(tok::equal)) + EqualEncountered = true; + if (Tok.Tok.is(tok::star) || Tok.Tok.is(tok::amp)) - Annotation.Type = determineStarAmpUsage(i); + Annotation.Type = determineStarAmpUsage(i, EqualEncountered); else if (isUnaryOperator(i)) Annotation.Type = TokenAnnotation::TT_UnaryOperator; else if (isBinaryOperator(Line.Tokens[i])) @@ -583,6 +587,7 @@ private: switch (Tok.Tok.getKind()) { case tok::equal: case tok::equalequal: + case tok::exclaimequal: case tok::star: //case tok::amp: case tok::plus: @@ -598,7 +603,8 @@ private: } } - TokenAnnotation::TokenType determineStarAmpUsage(unsigned Index) { + TokenAnnotation::TokenType determineStarAmpUsage(unsigned Index, + bool EqualEncountered) { if (Index == Annotations.size()) return TokenAnnotation::TT_Unknown; @@ -611,6 +617,11 @@ private: Line.Tokens[Index + 1].Tok.isLiteral()) return TokenAnnotation::TT_BinaryOperator; + // It is very unlikely that we are going to find a pointer or reference type + // definition on the RHS of an assignment. + if (EqualEncountered) + return TokenAnnotation::TT_BinaryOperator; + return TokenAnnotation::TT_PointerOrReference; } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index 745ecec730..be4363353e 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -333,6 +333,10 @@ TEST_F(FormatTest, UndestandsUnaryOperators) { verifyFormat("f(-1, -2, -3);"); verifyFormat("a[-1] = 5;"); verifyFormat("int a = 5 + -2;"); + verifyFormat("if (i == -1) {\n}"); + verifyFormat("if (i != -1) {\n}"); + verifyFormat("if (i > -1) {\n}"); + verifyFormat("if (i < -1) {\n}"); } TEST_F(FormatTest, UndestandsOverloadedOperators) { @@ -345,10 +349,10 @@ TEST_F(FormatTest, UnderstandsUsesOfStar) { verifyFormat("f(*a);"); verifyFormat("int a = b * 10;"); verifyFormat("int a = 10 * b;"); - // verifyFormat("int a = b * c;"); + verifyFormat("int a = b * c;"); verifyFormat("int a = *b;"); - // verifyFormat("int a = *b * c;"); - // verifyFormat("int a = b * *c;"); + verifyFormat("int a = *b * c;"); + verifyFormat("int a = b * *c;"); } TEST_F(FormatTest, HandlesIncludeDirectives) { |