diff options
author | Roberto Raggi <roberto.raggi@nokia.com> | 2010-02-02 16:36:14 +0100 |
---|---|---|
committer | Roberto Raggi <roberto.raggi@nokia.com> | 2010-02-02 16:36:14 +0100 |
commit | 14ffb1e465c3122f9bce86a99fa31f7a8a6fe7ef (patch) | |
tree | e4286b872c8ded065fa445042d82c9eb80307b89 /src/plugins | |
parent | 03fa188b41e46d9b0f6ad4d4e6e97f2d3711568c (diff) | |
download | qt-creator-14ffb1e465c3122f9bce86a99fa31f7a8a6fe7ef.tar.gz |
Some refactoring needed to create ranges for JavaScript functions.
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/qmljseditor/qmlcodecompletion.cpp | 10 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmlhoverhandler.cpp | 2 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljseditor.cpp | 33 | ||||
-rw-r--r-- | src/plugins/qmljseditor/qmljseditor.h | 4 |
4 files changed, 39 insertions, 10 deletions
diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index 043bdd28fa..097b659189 100644 --- a/src/plugins/qmljseditor/qmlcodecompletion.cpp +++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp @@ -618,7 +618,7 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) const SemanticInfo semanticInfo = edit->semanticInfo(); const QmlJS::Snapshot snapshot = semanticInfo.snapshot; - const Document::Ptr qmlDocument = semanticInfo.document; + const Document::Ptr document = semanticInfo.document; const QFileInfo currentFileInfo(fileName); @@ -632,11 +632,11 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) // Set up the current scope chain. Interpreter::ObjectValue *scope = interp.globalObject(); - Link link(qmlDocument, snapshot, &interp); + Link link(document, snapshot, &interp); - if (isQmlFile && qmlDocument) { - AST::UiObjectMember *declaringMember = semanticInfo.declaringMember(editor->position()); - scope = link.scopeChainAt(qmlDocument, declaringMember); + if (document) { + AST::Node *declaringMember = semanticInfo.declaringMember(editor->position()); + scope = link.scopeChainAt(document, declaringMember); } // Search for the operator that triggered the completion. diff --git a/src/plugins/qmljseditor/qmlhoverhandler.cpp b/src/plugins/qmljseditor/qmlhoverhandler.cpp index fc2dd793d1..979d8ea490 100644 --- a/src/plugins/qmljseditor/qmlhoverhandler.cpp +++ b/src/plugins/qmljseditor/qmlhoverhandler.cpp @@ -169,7 +169,7 @@ void QmlHoverHandler::updateHelpIdAndTooltip(TextEditor::ITextEditor *editor, in if (m_helpId.isEmpty()) { AST::Node *node = semanticInfo.nodeUnderCursor(pos); if (node && !(AST::cast<AST::StringLiteral *>(node) != 0 || AST::cast<AST::NumericLiteral *>(node) != 0)) { - AST::UiObjectMember *declaringMember = semanticInfo.declaringMember(pos); + AST::Node *declaringMember = semanticInfo.declaringMember(pos); Interpreter::Engine interp; Link link(qmlDocument, snapshot, &interp); diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 56c8790b5b..19c3d441dd 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -409,6 +409,20 @@ protected: return true; } +#if 0 // ### create ranges for function declarations. + virtual bool visit(AST::FunctionExpression *ast) + { + _ranges.append(createRange(ast)); + return true; + } + + virtual bool visit(AST::FunctionDeclaration *ast) + { + _ranges.append(createRange(ast)); + return true; + } +#endif + Range createRange(AST::UiObjectMember *member, AST::UiObjectInitializer *ast) { Range range; @@ -422,6 +436,21 @@ protected: range.end.setPosition(ast->rbraceToken.end()); return range; } + + Range createRange(AST::FunctionExpression *ast) + { + Range range; + + range.ast = ast; + + range.begin = QTextCursor(_textDocument); + range.begin.setPosition(ast->lbraceToken.begin()); + + range.end = QTextCursor(_textDocument); + range.end.setPosition(ast->rbraceToken.end()); + return range; + } + }; @@ -463,9 +492,9 @@ protected: } // end of anonymous namespace -AST::UiObjectMember *SemanticInfo::declaringMember(int cursorPosition) const +AST::Node *SemanticInfo::declaringMember(int cursorPosition) const { - AST::UiObjectMember *declaringMember = 0; + AST::Node *declaringMember = 0; for (int i = ranges.size() - 1; i != -1; --i) { const Range &range = ranges.at(i); diff --git a/src/plugins/qmljseditor/qmljseditor.h b/src/plugins/qmljseditor/qmljseditor.h index 28e50bb890..c332cc66d6 100644 --- a/src/plugins/qmljseditor/qmljseditor.h +++ b/src/plugins/qmljseditor/qmljseditor.h @@ -93,7 +93,7 @@ public: Range(): ast(0) {} public: // attributes - QmlJS::AST::UiObjectMember *ast; + QmlJS::AST::Node *ast; QTextCursor begin; QTextCursor end; }; @@ -106,7 +106,7 @@ public: int revision() const; // Returns the declaring member - QmlJS::AST::UiObjectMember *declaringMember(int cursorPosition) const; + QmlJS::AST::Node *declaringMember(int cursorPosition) const; // Returns the AST node under cursor QmlJS::AST::Node *nodeUnderCursor(int cursorPosition) const; |