forked from OSchip/llvm-project
Fix formatting over overloaded operators.
This fixes llvm.org/pr14686. We used to add too many spaces for different versions of overloaded operator function declarations/definitions. This patch changes, e.g. operator *() {} operator >() {} operator () () {} to operator*() {} operator>() {} operator()() {} llvm-svn: 171028
This commit is contained in:
parent
3ee6b10dd4
commit
537a29638d
|
@ -553,9 +553,19 @@ public:
|
|||
Annotations[CurrentIndex].Type = TokenAnnotation::TT_BinaryOperator;
|
||||
break;
|
||||
case tok::kw_operator:
|
||||
if (!Tokens[Index].Tok.is(tok::l_paren))
|
||||
if (Tokens[Index].Tok.is(tok::l_paren)) {
|
||||
Annotations[Index].Type = TokenAnnotation::TT_OverloadedOperator;
|
||||
next();
|
||||
next();
|
||||
if (Index < Tokens.size() && Tokens[Index].Tok.is(tok::r_paren)) {
|
||||
Annotations[Index].Type = TokenAnnotation::TT_OverloadedOperator;
|
||||
next();
|
||||
}
|
||||
} else {
|
||||
while (Index < Tokens.size() && !Tokens[Index].Tok.is(tok::l_paren)) {
|
||||
Annotations[Index].Type = TokenAnnotation::TT_OverloadedOperator;
|
||||
next();
|
||||
}
|
||||
}
|
||||
break;
|
||||
case tok::question:
|
||||
parseConditional();
|
||||
|
@ -633,6 +643,13 @@ public:
|
|||
if (Annotation.Type == TokenAnnotation::TT_CtorInitializerColon) {
|
||||
Annotation.MustBreakBefore = true;
|
||||
Annotation.SpaceRequiredBefore = true;
|
||||
} else if (Annotation.Type == TokenAnnotation::TT_OverloadedOperator) {
|
||||
Annotation.SpaceRequiredBefore =
|
||||
Line.Tokens[i].Tok.is(tok::identifier) || Line.Tokens[i].Tok.is(
|
||||
tok::kw_new) || Line.Tokens[i].Tok.is(tok::kw_delete);
|
||||
} else if (
|
||||
Annotations[i - 1].Type == TokenAnnotation::TT_OverloadedOperator) {
|
||||
Annotation.SpaceRequiredBefore = false;
|
||||
} else if (IsObjCMethodDecl && Line.Tokens[i].Tok.is(tok::identifier) &&
|
||||
(i != e - 1) && Line.Tokens[i + 1].Tok.is(tok::colon) &&
|
||||
Line.Tokens[i - 1].Tok.is(tok::identifier)) {
|
||||
|
|
|
@ -589,7 +589,22 @@ TEST_F(FormatTest, UnderstandsUnaryOperators) {
|
|||
}
|
||||
|
||||
TEST_F(FormatTest, UndestandsOverloadedOperators) {
|
||||
verifyFormat("bool operator<() {\n}");
|
||||
verifyFormat("bool operator<();");
|
||||
verifyFormat("bool operator>();");
|
||||
verifyFormat("bool operator=();");
|
||||
verifyFormat("bool operator==();");
|
||||
verifyFormat("bool operator!=();");
|
||||
verifyFormat("int operator+();");
|
||||
verifyFormat("int operator++();");
|
||||
verifyFormat("bool operator();");
|
||||
verifyFormat("bool operator()();");
|
||||
verifyFormat("bool operator[]();");
|
||||
verifyFormat("operator bool();");
|
||||
verifyFormat("operator SomeType<int>();");
|
||||
verifyFormat("void *operator new(std::size_t size);");
|
||||
verifyFormat("void *operator new[](std::size_t size);");
|
||||
verifyFormat("void operator delete(void *ptr);");
|
||||
verifyFormat("void operator delete[](void *ptr);");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, UnderstandsUsesOfStar) {
|
||||
|
|
Loading…
Reference in New Issue