19void QQmlLSQuickCompletionPlugin::suggestSnippetsForLeftHandSideOfBinding(
20 const DomItem &itemAtPosition, BackInsertIterator result)
const
22 auto file = itemAtPosition.containingFile().as<QmlFile>();
27 const auto &imports = file->imports();
28 auto it = std::find_if(imports.constBegin(), imports.constEnd(), [](
const Import &import) {
29 return import.uri.moduleUri() == u"QtQuick";
31 if (it == imports.constEnd()) {
36 suggestSnippetsForRightHandSideOfBinding(itemAtPosition, result);
40 const QString userTypedQualifier = QQmlLSUtils::qualifiersFrom(itemAtPosition);
41 if (!userTypedQualifier.isEmpty()
42 && !it->importId.startsWith(QStringView(userTypedQualifier).chopped(1))) {
46 const QByteArray prefixForSnippet =
47 userTypedQualifier.isEmpty() ? it->importId.toUtf8() : QByteArray();
48 const QByteArray prefixWithDotForSnippet =
49 it->importId.isEmpty() ? QByteArray() : it->importId.toUtf8().append(u'.');
51 auto resolver = file->typeResolver();
54 const auto qquickItemScope = resolver->typeForName(prefixWithDotForSnippet + u"Item"_s);
55 const QQmlJSScope::ConstPtr ownerScope = itemAtPosition.qmlObject().semanticScope();
56 if (!ownerScope || !qquickItemScope)
59 if (ownerScope->inherits(qquickItemScope)) {
60 result = QQmlLSCompletion::makeSnippet(
61 "states binding with PropertyChanges in State",
63 "\t"_ba.append(prefixWithDotForSnippet)
65 "\t\tname: \"${1:name}\"\n"
66 "\t\t"_ba.append(prefixWithDotForSnippet)
67 .append(
"PropertyChanges {\n"
68 "\t\t\ttarget: ${2:object}\n"
72 result = QQmlLSCompletion::makeSnippet(
"transitions binding with Transition",
74 "\t"_ba.append(prefixWithDotForSnippet)
75 .append(
"Transition {\n"
76 "\t\tfrom: \"${1:fromState}\"\n"
77 "\t\tto: \"${2:fromState}\"\n"
83void QQmlLSQuickCompletionPlugin::suggestSnippetsForRightHandSideOfBinding(
84 const DomItem &itemAtPosition, BackInsertIterator result)
const
86 auto file = itemAtPosition.containingFile().as<QmlFile>();
91 const auto &imports = file->imports();
92 auto it = std::find_if(imports.constBegin(), imports.constEnd(), [](
const Import &import) {
93 return import.uri.moduleUri() == u"QtQuick";
95 if (it == imports.constEnd()) {
101 const QString userTypedQualifier = QQmlLSUtils::qualifiersFrom(itemAtPosition);
102 if (!userTypedQualifier.isEmpty()
103 && !it->importId.startsWith(QStringView(userTypedQualifier).chopped(1))) {
107 const QByteArray prefixForSnippet =
108 userTypedQualifier.isEmpty() ? it->importId.toUtf8() : QByteArray();
109 const QByteArray prefixWithDotForSnippet =
110 it->importId.isEmpty() ? QByteArray() : it->importId.toUtf8().append(u'.');
113 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"BorderImage snippet",
116 "\tsource: \"${2:file}\"\n"
117 "\twidth: ${3:100}; height: ${4:100}\n"
118 "\tborder.left: ${5: 5}; border.top: ${5}\n"
119 "\tborder.right: ${5}; border.bottom: ${5}\n"
121 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"ColorAnimation snippet",
123 "\tfrom: \"${1:white}\"\n"
124 "\tto: \"${2:black}\"\n"
125 "\tduration: ${3:200}\n"
127 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"Image snippet",
130 "\tsource: \"${2:file}\"\n"
132 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"Item snippet",
136 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"NumberAnimation snippet",
137 "NumberAnimation {\n"
138 "\ttarget: ${1:object}\n"
139 "\tproperty: \"${2:name}\"\n"
140 "\tduration: ${3:200}\n"
141 "\teasing.type: "_ba.append(prefixWithDotForSnippet)
142 .append(
"Easing.${4:InOutQuad}\n"
144 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"NumberAnimation with targets snippet",
145 "NumberAnimation {\n"
146 "\ttargets: [${1:object}]\n"
147 "\tproperties: \"${2:name}\"\n"
148 "\tduration: ${3:200}\n"
150 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"PauseAnimation snippet",
152 "\tduration: ${1:200}\n"
154 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"PropertyAction snippet",
156 "\ttarget: ${1:object}\n"
157 "\tproperty: \"${2:name}\"\n"
159 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"PropertyAction with targets snippet",
161 "\ttargets: [${1:object}]\n"
162 "\tproperties: \"${2:name}\"\n"
164 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"PropertyChanges snippet",
165 "PropertyChanges {\n"
166 "\ttarget: ${1:object}\n"
168 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"State snippet",
170 "\tname: ${1:name}\n"
171 "\t"_ba.append(prefixWithDotForSnippet)
172 .append(
"PropertyChanges {\n"
173 "\t\ttarget: ${2:object}\n"
176 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"Text snippet",
179 "\ttext: qsTr(\"${2:text}\")\n"
181 result = QQmlLSCompletion::makeSnippet(prefixForSnippet,
"Transition snippet",
183 "\tfrom: \"${1:fromState}\"\n"
184 "\tto: \"${2:toState}\"\n"