Improve clang-format's handling of unary operators.
llvm-svn: 169500
This commit is contained in:
parent
9f84eecc9e
commit
26333c3b6b
|
@ -618,12 +618,24 @@ private:
|
|||
|
||||
bool isUnaryOperator(unsigned Index) {
|
||||
const Token &Tok = Line.Tokens[Index].Tok;
|
||||
|
||||
// '++', '--' and '!' are always unary operators.
|
||||
if (Tok.is(tok::minusminus) || Tok.is(tok::plusplus) ||
|
||||
Tok.is(tok::exclaim))
|
||||
return true;
|
||||
|
||||
// The other possible unary operators are '+' and '-' as we
|
||||
// determine the usage of '*' and '&' in determineStarAmpUsage().
|
||||
if (Tok.isNot(tok::minus) && Tok.isNot(tok::plus))
|
||||
return false;
|
||||
|
||||
// Use heuristics to recognize unary operators.
|
||||
const Token &PreviousTok = Line.Tokens[Index - 1].Tok;
|
||||
if (PreviousTok.is(tok::equal) || PreviousTok.is(tok::l_paren) ||
|
||||
PreviousTok.is(tok::comma) || PreviousTok.is(tok::l_square))
|
||||
return true;
|
||||
|
||||
// Fall back to marking the token as binary operator.
|
||||
return Annotations[Index - 1].Type == TokenAnnotation::TT_BinaryOperator;
|
||||
}
|
||||
|
||||
|
|
|
@ -364,6 +364,9 @@ TEST_F(FormatTest, UndestandsUnaryOperators) {
|
|||
verifyFormat("if (i != -1) {\n}");
|
||||
verifyFormat("if (i > -1) {\n}");
|
||||
verifyFormat("if (i < -1) {\n}");
|
||||
verifyFormat("++(a->f());");
|
||||
verifyFormat("--(a->f());");
|
||||
verifyFormat("if (!(a->f())) {\n}");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, UndestandsOverloadedOperators) {
|
||||
|
|
Loading…
Reference in New Issue