From 68d8d8309369c551615faa55c85aaf0cf94b1157 Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 30 Mar 2009 15:25:06 +0200 Subject: [PATCH] Simplified the code that looks for the identifier under the cursor. --- src/libs/cplusplus/TokenUnderCursor.cpp | 7 ++++-- src/libs/cplusplus/TokenUnderCursor.h | 2 +- src/plugins/cppeditor/cppeditor.cpp | 31 ++++++++++++++----------- 3 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/libs/cplusplus/TokenUnderCursor.cpp b/src/libs/cplusplus/TokenUnderCursor.cpp index b52e017bebe..a819007828e 100644 --- a/src/libs/cplusplus/TokenUnderCursor.cpp +++ b/src/libs/cplusplus/TokenUnderCursor.cpp @@ -42,7 +42,7 @@ TokenUnderCursor::TokenUnderCursor() TokenUnderCursor::~TokenUnderCursor() { } -SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor) const +SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor, QTextBlock *b) const { SimpleLexer tokenize; tokenize.setObjCEnabled(true); @@ -54,8 +54,11 @@ SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor) const QList<SimpleToken> tokens = tokenize(block.text(), previousBlockState(block)); for (int index = tokens.size() - 1; index != -1; --index) { const SimpleToken &tk = tokens.at(index); - if (tk.position() < column) + if (tk.position() < column) { + if (b) + *b = block; return tk; + } } return SimpleToken(); diff --git a/src/libs/cplusplus/TokenUnderCursor.h b/src/libs/cplusplus/TokenUnderCursor.h index 1c3d4691874..93199d2b382 100644 --- a/src/libs/cplusplus/TokenUnderCursor.h +++ b/src/libs/cplusplus/TokenUnderCursor.h @@ -48,7 +48,7 @@ public: TokenUnderCursor(); ~TokenUnderCursor(); - SimpleToken operator()(const QTextCursor &cursor) const; + SimpleToken operator()(const QTextCursor &cursor, QTextBlock *block = 0) const; private: int previousBlockState(const QTextBlock &block) const; diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index dc043246688..1593b6118c2 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -618,24 +618,27 @@ CPPEditor::Link CPPEditor::findLinkAt(const QTextCursor &cursor, if (!lastSymbol) return link; - // Check whether we're at a name - const int endOfName = endOfNameAtPosition(cursor.position()); - if (!characterAt(endOfName - 1).isLetterOrNumber()) - return link; - - // Remember the position and length of the name QTextCursor tc = cursor; - tc.setPosition(endOfName); - tc.movePosition(QTextCursor::PreviousWord, QTextCursor::KeepAnchor); - const int nameStart = tc.position(); - const int nameLength = tc.anchor() - tc.position(); - tc.setPosition(endOfName); - // Drop out if we're at a number, string or comment static TokenUnderCursor tokenUnderCursor; - const SimpleToken tk = tokenUnderCursor(tc); - if (tk.isLiteral() || tk.isComment()) + + QTextBlock block; + const SimpleToken tk = tokenUnderCursor(tc, &block); + + if (tk.isLiteral() || tk.isComment()) { + // Drop out if we're at a number, string or comment return link; + } + + if (tk.isNot(T_IDENTIFIER)) + return link; + + const int nameStart = tk.position(); + const int nameLength = tk.length(); + const int endOfName = nameStart + nameLength; + + const QString name = block.text().mid(nameStart, nameLength); + tc.setPosition(block.position() + endOfName); // Evaluate the type of the expression under the cursor ExpressionUnderCursor expressionUnderCursor; -- GitLab