forked from qt-creator/qt-creator
Some refactoring needed to create ranges for JavaScript functions.
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user