Simplified the code that looks for the identifier under the cursor.

This commit is contained in:
Roberto Raggi
2009-03-30 15:25:06 +02:00
parent 1949436635
commit 68d8d83093
3 changed files with 23 additions and 17 deletions

View File

@@ -42,7 +42,7 @@ TokenUnderCursor::TokenUnderCursor()
TokenUnderCursor::~TokenUnderCursor() TokenUnderCursor::~TokenUnderCursor()
{ } { }
SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor) const SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor, QTextBlock *b) const
{ {
SimpleLexer tokenize; SimpleLexer tokenize;
tokenize.setObjCEnabled(true); tokenize.setObjCEnabled(true);
@@ -54,9 +54,12 @@ SimpleToken TokenUnderCursor::operator()(const QTextCursor &cursor) const
QList<SimpleToken> tokens = tokenize(block.text(), previousBlockState(block)); QList<SimpleToken> tokens = tokenize(block.text(), previousBlockState(block));
for (int index = tokens.size() - 1; index != -1; --index) { for (int index = tokens.size() - 1; index != -1; --index) {
const SimpleToken &tk = tokens.at(index); const SimpleToken &tk = tokens.at(index);
if (tk.position() < column) if (tk.position() < column) {
if (b)
*b = block;
return tk; return tk;
} }
}
return SimpleToken(); return SimpleToken();
} }

View File

@@ -48,7 +48,7 @@ public:
TokenUnderCursor(); TokenUnderCursor();
~TokenUnderCursor(); ~TokenUnderCursor();
SimpleToken operator()(const QTextCursor &cursor) const; SimpleToken operator()(const QTextCursor &cursor, QTextBlock *block = 0) const;
private: private:
int previousBlockState(const QTextBlock &block) const; int previousBlockState(const QTextBlock &block) const;

View File

@@ -618,24 +618,27 @@ CPPEditor::Link CPPEditor::findLinkAt(const QTextCursor &cursor,
if (!lastSymbol) if (!lastSymbol)
return link; 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; 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; 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; 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 // Evaluate the type of the expression under the cursor
ExpressionUnderCursor expressionUnderCursor; ExpressionUnderCursor expressionUnderCursor;