From ac4f53ef406ec147f1b1ad2e7b85d64f7c653d5d Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Thu, 8 Oct 2009 14:50:30 +0200 Subject: [PATCH] Search for `complete' expressions followed by a T_COMMA As a side-effect, we can finally complete things like connect(&a, SIGNAL( --- src/libs/cplusplus/ExpressionUnderCursor.cpp | 29 ++++++++++++++++++-- src/libs/cplusplus/ExpressionUnderCursor.h | 1 + 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/libs/cplusplus/ExpressionUnderCursor.cpp b/src/libs/cplusplus/ExpressionUnderCursor.cpp index 8016f537bb2..d95982b881c 100644 --- a/src/libs/cplusplus/ExpressionUnderCursor.cpp +++ b/src/libs/cplusplus/ExpressionUnderCursor.cpp @@ -45,8 +45,33 @@ ExpressionUnderCursor::~ExpressionUnderCursor() int ExpressionUnderCursor::startOfExpression(BackwardsScanner &tk, int index) { - // tk is a reference to a const QList. So, don't worry about [] access. - // ### TODO implement multiline support. It should be pretty easy. + index = startOfExpression_helper(tk, index); + + if (_jumpedComma) { + const SimpleToken &tok = tk[index - 1]; + + switch (tok.kind()) { + case T_LPAREN: + case T_LBRACKET: + case T_LBRACE: + case T_SEMICOLON: + case T_COLON: + case T_QUESTION: + break; + + default: + if (tok.isOperator()) + return startOfExpression(tk, index - 1); + + break; + } + } + + return index; +} + +int ExpressionUnderCursor::startOfExpression_helper(BackwardsScanner &tk, int index) +{ if (tk[index - 1].isLiteral()) { return index - 1; } else if (tk[index - 1].is(T_THIS)) { diff --git a/src/libs/cplusplus/ExpressionUnderCursor.h b/src/libs/cplusplus/ExpressionUnderCursor.h index 35be67214df..b72f790f977 100644 --- a/src/libs/cplusplus/ExpressionUnderCursor.h +++ b/src/libs/cplusplus/ExpressionUnderCursor.h @@ -55,6 +55,7 @@ public: private: int startOfExpression(BackwardsScanner &tk, int index); + int startOfExpression_helper(BackwardsScanner &tk, int index); int previousBlockState(const QTextBlock &block); bool isAccessToken(const SimpleToken &tk); -- GitLab