Commit 68d8d830 authored by Roberto Raggi's avatar Roberto Raggi
Browse files

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

parent 19494366
......@@ -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,9 +54,12 @@ 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();
}
......
......@@ -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;
......
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment