forked from qt-creator/qt-creator
Simplified the code that looks for the identifier under the cursor.
This commit is contained in:
@@ -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,8 +54,11 @@ 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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user