forked from OSchip/llvm-project
Improve recognition of template parameters.
Before: return a<b &&c> d; After: return a < b && c > d; llvm-svn: 183077
This commit is contained in:
parent
7c275640e7
commit
d589391d07
|
@ -53,8 +53,15 @@ private:
|
|||
if (CurrentToken->isOneOf(tok::r_paren, tok::r_square, tok::r_brace,
|
||||
tok::question, tok::colon))
|
||||
return false;
|
||||
// If a && or || is found and interpreted as a binary operator, this set
|
||||
// of angles is like part of something like "a < b && c > d". If the
|
||||
// angles are inside an expression, the ||/&& might also be a binary
|
||||
// operator that was misinterpreted because we are parsing template
|
||||
// parameters.
|
||||
// FIXME: This is getting out of hand, write a decent parser.
|
||||
if (CurrentToken->Previous->isOneOf(tok::pipepipe, tok::ampamp) &&
|
||||
CurrentToken->Previous->Type != TT_PointerOrReference &&
|
||||
(CurrentToken->Previous->Type == TT_BinaryOperator ||
|
||||
Contexts[Contexts.size() - 2].IsExpression) &&
|
||||
Line.First->isNot(tok::kw_template))
|
||||
return false;
|
||||
updateParameterCount(Left, CurrentToken);
|
||||
|
|
|
@ -2893,6 +2893,13 @@ TEST_F(FormatTest, UnderstandsTemplateParameters) {
|
|||
|
||||
verifyFormat("f<int>();");
|
||||
verifyFormat("template <typename T> void f() {}");
|
||||
|
||||
// Not template parameters.
|
||||
verifyFormat("return a < b && c > d;");
|
||||
verifyFormat("void f() {\n"
|
||||
" while (a < b && c > d) {\n"
|
||||
" }\n"
|
||||
"}");
|
||||
}
|
||||
|
||||
TEST_F(FormatTest, UnderstandsBinaryOperators) {
|
||||
|
|
Loading…
Reference in New Issue