diff --git a/src/plugins/qmljseditor/qmlcodecompletion.cpp b/src/plugins/qmljseditor/qmlcodecompletion.cpp index a33c92e5c5b9815fd53390296e5984565cc9883c..1c945682574d698721969882b8bf893ce9eda1c3 100644 --- a/src/plugins/qmljseditor/qmlcodecompletion.cpp +++ b/src/plugins/qmljseditor/qmlcodecompletion.cpp @@ -787,6 +787,10 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) const QFileInfo currentFileInfo(fileName); const QString currentFilePath = currentFileInfo.absolutePath(); + bool isQmlFile = false; + if (currentFileInfo.suffix() == QLatin1String("qml")) + isQmlFile = true; + const QIcon componentIcon = iconForColor(Qt::yellow); const QIcon symbolIcon = iconForColor(Qt::darkCyan); @@ -840,65 +844,69 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) } // Set up the current scope chain. - Interpreter::ObjectValue *scope = interp.newObject(/* prototype = */ 0); + Interpreter::ObjectValue *scope = interp.globalObject(); + + if (isQmlFile) { + scope = interp.newObject(/* prototype = */ 0); - AST::UiObjectMember *declaringMember = 0; - AST::UiObjectMember *parentMember = 0; + AST::UiObjectMember *declaringMember = 0; + AST::UiObjectMember *parentMember = 0; - const int cursorPosition = editor->position(); - foreach (const Range &range, semanticInfo.ranges) { - if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) { - parentMember = declaringMember; - declaringMember = range.ast; + const int cursorPosition = editor->position(); + foreach (const Range &range, semanticInfo.ranges) { + if (cursorPosition >= range.begin.position() && cursorPosition <= range.end.position()) { + parentMember = declaringMember; + declaringMember = range.ast; + } } - } - // ### TODO: remove me. This is just a quick and dirty hack to get some completion - // for the property definitions. - SearchPropertyDefinitions searchPropertyDefinitions; + // ### TODO: remove me. This is just a quick and dirty hack to get some completion + // for the property definitions. + SearchPropertyDefinitions searchPropertyDefinitions; - const QList<AST::UiPublicMember *> properties = searchPropertyDefinitions(qmlDocument); - foreach (AST::UiPublicMember *prop, properties) { - if (! (prop->name && prop->memberType)) - continue; + const QList<AST::UiPublicMember *> properties = searchPropertyDefinitions(qmlDocument); + foreach (AST::UiPublicMember *prop, properties) { + if (! (prop->name && prop->memberType)) + continue; - const QString propName = prop->name->asString(); - const QString propType = prop->memberType->asString(); + const QString propName = prop->name->asString(); + const QString propType = prop->memberType->asString(); - interp.globalObject()->setProperty(propName, interp.defaultValueForBuiltinType(propType)); - } + interp.globalObject()->setProperty(propName, interp.defaultValueForBuiltinType(propType)); + } - // Get the name of the declaring item. - QString declaringItemName = QLatin1String("Item"); + // Get the name of the declaring item. + QString declaringItemName = QLatin1String("Item"); - if (AST::UiObjectDefinition *binding = AST::cast<AST::UiObjectDefinition *>(declaringMember)) - declaringItemName = qualifiedNameId(binding->qualifiedTypeNameId); - else if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(declaringMember)) - declaringItemName = qualifiedNameId(binding->qualifiedTypeNameId); + if (AST::UiObjectDefinition *binding = AST::cast<AST::UiObjectDefinition *>(declaringMember)) + declaringItemName = qualifiedNameId(binding->qualifiedTypeNameId); + else if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(declaringMember)) + declaringItemName = qualifiedNameId(binding->qualifiedTypeNameId); - Interpreter::ObjectValue *declaringItem = newComponent(&interp, declaringItemName, userComponents); - if (! declaringItem) - declaringItem = interp.newQmlObject(QLatin1String("Item")); + Interpreter::ObjectValue *declaringItem = newComponent(&interp, declaringItemName, userComponents); + if (! declaringItem) + declaringItem = interp.newQmlObject(QLatin1String("Item")); - if (declaringItem) { - scope->setScope(declaringItem); - declaringItem->setScope(interp.globalObject()); - } + if (declaringItem) { + scope->setScope(declaringItem); + declaringItem->setScope(interp.globalObject()); + } - // Get the name of the parent of the declaring item. - QString parentItemName = QLatin1String("Item"); + // Get the name of the parent of the declaring item. + QString parentItemName = QLatin1String("Item"); - if (AST::UiObjectDefinition *binding = AST::cast<AST::UiObjectDefinition *>(parentMember)) - parentItemName = qualifiedNameId(binding->qualifiedTypeNameId); - else if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(parentMember)) - parentItemName = qualifiedNameId(binding->qualifiedTypeNameId); + if (AST::UiObjectDefinition *binding = AST::cast<AST::UiObjectDefinition *>(parentMember)) + parentItemName = qualifiedNameId(binding->qualifiedTypeNameId); + else if (AST::UiObjectBinding *binding = AST::cast<AST::UiObjectBinding *>(parentMember)) + parentItemName = qualifiedNameId(binding->qualifiedTypeNameId); - Interpreter::ObjectValue *parentItem = newComponent(&interp, parentItemName, userComponents); - if (! parentItem) - parentItem = interp.newQmlObject(QLatin1String("Item")); + Interpreter::ObjectValue *parentItem = newComponent(&interp, parentItemName, userComponents); + if (! parentItem) + parentItem = interp.newQmlObject(QLatin1String("Item")); - if (parentItem) - scope->setProperty(QLatin1String("parent"), parentItem); + if (parentItem) + scope->setProperty(QLatin1String("parent"), parentItem); + } // Search for the operator that triggered the completion. QChar completionOperator; @@ -995,14 +1003,16 @@ int QmlCodeCompletion::startCompletion(TextEditor::ITextEditable *editor) return -1; } - if (completionOperator.isNull() - || completionOperator.isSpace() - || completionOperator == QLatin1Char('{') - || completionOperator == QLatin1Char('}') - || completionOperator == QLatin1Char(':') - || completionOperator == QLatin1Char(';')) { - updateSnippets(); - m_completions.append(m_snippets); + if (isQmlFile) { + if (completionOperator.isNull() + || completionOperator.isSpace() + || completionOperator == QLatin1Char('{') + || completionOperator == QLatin1Char('}') + || completionOperator == QLatin1Char(':') + || completionOperator == QLatin1Char(';')) { + updateSnippets(); + m_completions.append(m_snippets); + } } if (! m_completions.isEmpty())