From 0bb575b1f27199f6fa3c16ff805e8663920ef4cf Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Mon, 1 Feb 2010 16:14:34 +0100 Subject: [PATCH] Create a link for the QML/JS expression under cursor. --- src/plugins/qmljseditor/qmljseditor.cpp | 38 +++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index c34b206899e..0593033a26d 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -835,6 +835,44 @@ void QmlJSTextEditor::createToolBar(QmlJSEditorEditable *editable) TextEditor::BaseTextEditor::Link QmlJSTextEditor::findLinkAt(const QTextCursor &cursor, bool /*resolveTarget*/) { Link link; + const SemanticInfo semanticInfo = m_semanticInfo; + + if (semanticInfo.document) { + CollectASTNodes nodes; + nodes.accept(semanticInfo.document->ast()); + + const unsigned cursorPosition = cursor.position(); + + foreach (AST::UiQualifiedId *q, nodes.qualifiedIds) { + if (cursorPosition >= q->identifierToken.begin()) { + for (AST::UiQualifiedId *tail = q; tail; tail = tail->next) { + if (! tail->next && cursorPosition <= tail->identifierToken.end()) { + link.begin = tail->identifierToken.begin(); + link.end = tail->identifierToken.end(); + return link; + } + } + } + } + + foreach (AST::IdentifierExpression *id, nodes.identifiers) { + if (cursorPosition >= id->identifierToken.begin() && cursorPosition <= id->identifierToken.end()) { + link.begin = id->firstSourceLocation().begin(); + link.end = id->lastSourceLocation().end(); + return link; + } + } + + foreach (AST::FieldMemberExpression *mem, nodes.fieldMembers) { + if (mem->name && cursorPosition >= mem->identifierToken.begin() && cursorPosition <= mem->identifierToken.end()) { + link.begin = mem->lastSourceLocation().begin(); + link.end = mem->lastSourceLocation().end(); + return link; + } + } + + } + return link; } -- GitLab