44 QString fieldFilterStr;
46 auto it = m_fieldFilterRemove.begin();
47 while (it != m_fieldFilterRemove.end()) {
48 if (!fieldFilterStr.isEmpty())
49 fieldFilterStr.append(u",");
50 fieldFilterStr.append(QLatin1String(
"-%1:%2").arg(it.key(), it.value()));
55 auto it = m_fieldFilterAdd.begin();
56 while (it != m_fieldFilterAdd.end()) {
57 if (!fieldFilterStr.isEmpty())
58 fieldFilterStr.append(u",");
59 fieldFilterStr.append(QLatin1String(
"+%1:%2").arg(it.key(), it.value()));
63 return fieldFilterStr;
79 if (!m_filtredTypes.contains(baseK) && !m_filtredTypes.contains(objK)
80 && !m_filtredFields.contains(qHash(c.stringView())))
81 return m_filtredDefault;
82 QString typeStr = domTypeToString(baseK);
83 QList<QString> tVals = m_fieldFilterRemove.values(typeStr);
84 QString name = c.name();
85 if (tVals.contains(name))
87 if (tVals.contains(QString())
88 || m_fieldFilterRemove.values(domTypeToString(objK)).contains(QString())
89 || m_fieldFilterRemove.values(QString()).contains(name)) {
90 return m_fieldFilterAdd.values(typeStr).contains(name);
92 }
else if (m_filtredTypes.contains(baseK)) {
93 QString typeStr = domTypeToString(baseK);
94 QList<QString> tVals = m_fieldFilterRemove.values(typeStr);
95 return !tVals.contains(QString());
104 QRegularExpression fieldRe(QRegularExpression::anchoredPattern(QStringLiteral(
105 uR"((?<op>[-+])?(?:(?<type>[a-zA-Z0-9_]*):)?(?<field>[a-zA-Z0-9_]*))")));
106 for (
const QString &fField : fFields.split(QLatin1Char(
','))) {
107 QRegularExpressionMatch m = fieldRe.matchView(fField);
109 if (m.capturedView(u"op") == u"+") {
110 m_fieldFilterRemove.remove(m.captured(u"type"), m.captured(u"field"));
111 m_fieldFilterAdd.insert(m.captured(u"type"), m.captured(u"field"));
113 m_fieldFilterRemove.insert(m.captured(u"type"), m.captured(u"field"));
114 m_fieldFilterAdd.remove(m.captured(u"type"), m.captured(u"field"));
117 qCWarning(domLog) <<
"could not extract filter from" << fField;
131 QMultiMap<QString, QString> fieldFilterAdd { { QLatin1String(
"ScriptExpression"),
132 QLatin1String(
"code") } };
133 QMultiMap<QString, QString> fieldFilterRemove{
134 { QString(), Fields::code.toString() },
135 { QString(), Fields::postCode.toString() },
136 { QString(), Fields::preCode.toString() },
137 { QString(), Fields::importScope.toString() },
138 { QString(), Fields::fileLocationsTree.toString() },
139 { QString(), Fields::astComments.toString() },
140 { QString(), Fields::comments.toString() },
141 { QString(), Fields::exports.toString() },
142 { QString(), Fields::propertyInfos.toString() },
143 { QLatin1String(
"FileLocationsNode"), Fields::parent.toString() }
145 return FieldFilter { fieldFilterAdd, fieldFilterRemove };
150 QMultiMap<QString, QString> fieldFilterAdd {};
151 QMultiMap<QString, QString> fieldFilterRemove{
152 { QString(), QLatin1String(
"code") },
153 { QString(), QLatin1String(
"propertyInfos") },
154 { QString(), QLatin1String(
"fileLocationsTree") },
155 { QString(), QLatin1String(
"location") },
156 { QLatin1String(
"ScriptExpression"), QLatin1String(
"localOffset") },
157 { QLatin1String(
"ScriptExpression"), QLatin1String(
"preCode") },
158 { QLatin1String(
"ScriptExpression"), QLatin1String(
"postCode") },
159 { QLatin1String(
"FileLocationsNode"), QLatin1String(
"parent") },
160 { QLatin1String(
"Reference"), QLatin1String(
"get") },
161 { QLatin1String(
"QmlComponent"), QLatin1String(
"ids") },
162 { QLatin1String(
"QmlObject"), QLatin1String(
"prototypes") }
164 return FieldFilter { fieldFilterAdd, fieldFilterRemove };
169 QMultiMap<QString, QString> fieldFilterAdd {};
170 QMultiMap<QString, QString> fieldFilterRemove{
171 { QString(), QLatin1String(
"propertyInfos") },
172 { QLatin1String(
"ScriptExpression"), QLatin1String(
"localOffset") },
173 { QLatin1String(
"FileLocationsInfo"), QLatin1String(
"regions") },
174 { QLatin1String(
"FileLocationsNode"), QLatin1String(
"parent") },
175 { QLatin1String(
"QmlComponent"), QLatin1String(
"ids") },
176 { QLatin1String(
"QmlObject"), QLatin1String(
"prototypes") },
177 { QLatin1String(
"Reference"), QLatin1String(
"get") }
179 return FieldFilter { fieldFilterAdd, fieldFilterRemove };
184 QMultiMap<QString, QString> fieldFilterAdd {};
185 QMultiMap<QString, QString> fieldFilterRemove{
186 { QString(), QLatin1String(
"propertyInfos") },
187 { QLatin1String(
"FileLocationsInfo"), QLatin1String(
"regions") },
188 { QLatin1String(
"Reference"), QLatin1String(
"get") },
189 { QLatin1String(
"QmlComponent"), QLatin1String(
"ids") },
190 { QLatin1String(
"QmlObject"), QLatin1String(
"prototypes") },
191 { QLatin1String(), QLatin1String(
"code") },
192 { QLatin1String(
"ScriptExpression"), QLatin1String(
"localOffset") },
193 { QLatin1String(
"ScriptExpression"), QLatin1String(
"astRelocatableDump") },
194 { QLatin1String(
"FileLocationsNode"), QLatin1String(
"parent") },
195 { QString(), QLatin1String(
"fileLocationsTree") },
196 { QString(), QLatin1String(
"preCode") },
197 { QString(), QLatin1String(
"postCode") },
198 { QString(), QLatin1String(
"comments") },
199 { QString(), QLatin1String(
"astComments") },
200 { QString(), QLatin1String(
"location") }
202 return FieldFilter { fieldFilterAdd, fieldFilterRemove };
207 QSet<QString> filtredFieldStrs;
208 QSet<QString> filtredTypeStrs;
209 static QHash<QString, DomType> fieldToId = []() {
210 QHash<QString, DomType> res;
211 auto reverseMap = domTypeToStringMap();
212 auto it = reverseMap.cbegin();
213 auto end = reverseMap.cend();
215 res[it.value()] = it.key();
220 auto addFilteredOfMap = [&](
const QMultiMap<QString, QString> &map) {
221 auto it = map.cbegin();
222 auto end = map.cend();
224 filtredTypeStrs.insert(it.key());
227 const auto &fieldKeys = map.values(QString());
228 for (
const auto &f : fieldKeys)
229 filtredFieldStrs.insert(f);
231 addFilteredOfMap(m_fieldFilterAdd);
232 addFilteredOfMap(m_fieldFilterRemove);
233 m_filtredDefault =
true;
234 if (m_fieldFilterRemove.values(QString()).contains(QString()))
235 m_filtredDefault =
false;
236 m_filtredFields.clear();
237 for (
const auto &s : filtredFieldStrs)
239 m_filtredFields.insert(qHash(QStringView(s)));
240 m_filtredTypes.clear();
241 for (
const auto &s : filtredTypeStrs) {
244 if (fieldToId.contains(s)) {
245 m_filtredTypes.insert(fieldToId.value(s));
247 qCWarning(domLog) <<
"Filter on unknown type " << s <<
" will be ignored";