Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qqmljslogger_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
3// Qt-Security score:significant
4
5#ifndef QQMLJSLOGGER_P_H
6#define QQMLJSLOGGER_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <qtqmlcompilerexports.h>
20
21#include "qcoloroutput_p.h"
23
24#include <private/qqmljsdiagnosticmessage_p.h>
25
26#include <QtCore/qhash.h>
27#include <QtCore/qmap.h>
28#include <QtCore/qstring.h>
29#include <QtCore/qlist.h>
30#include <QtCore/qset.h>
31#include <QtCore/QLoggingCategory>
32
33#include <optional>
34
36
37/*!
38 \internal
39 Used to print the line containing the location of a certain error
40 */
41class Q_QMLCOMPILER_EXPORT IssueLocationWithContext
42{
43public:
44 /*!
45 \internal
46 \param code: The whole text of a translation unit
47 \param location: The location where an error occurred.
48 */
49 IssueLocationWithContext(QStringView code, const QQmlJS::SourceLocation &location) {
50 quint32 before = qMax(0, code.lastIndexOf(QLatin1Char('\n'), location.offset));
51
52 if (before != 0 && before < location.offset)
53 before++;
54
55 m_beforeText = code.mid(before, location.offset - before);
56 m_issueText = code.mid(location.offset, location.length);
57 int after = code.indexOf(QLatin1Char('\n'), location.offset + location.length);
58 m_afterText = code.mid(location.offset + location.length,
59 after - (location.offset+location.length));
60 }
61
62 // returns start of the line till first character of location
63 QStringView beforeText() const { return m_beforeText; }
64 // returns the text at location
65 QStringView issueText() const { return m_issueText; }
66 // returns any text after location until the end of the line is reached
67 QStringView afterText() const { return m_afterText; }
68
69private:
70 QStringView m_beforeText;
71 QStringView m_issueText;
72 QStringView m_afterText;
73};
74
75class Q_QMLCOMPILER_EXPORT QQmlJSFixSuggestion
76{
77public:
78 QQmlJSFixSuggestion() = default;
79 QQmlJSFixSuggestion(const QString &description, const QQmlJS::SourceLocation &location,
80 const QString &replacement = QString());
81
82 QString description() const { return m_description; }
83 QQmlJS::SourceLocation location() const { return m_location; }
84 QString replacement() const { return m_replacement; }
85
86 void setFilename(const QString &filename) { m_filename = filename; }
87 QString filename() const { return m_filename; }
88
89 void setAutoApplicable(bool autoApply = true) { m_autoApplicable = autoApply; }
90 bool isAutoApplicable() const { return m_autoApplicable; }
91
92 bool operator==(const QQmlJSFixSuggestion &) const;
93 bool operator!=(const QQmlJSFixSuggestion &) const;
94
95private:
96 QQmlJS::SourceLocation m_location;
97 QString m_description;
98 QString m_replacement;
99 QString m_filename;
100 bool m_autoApplicable = false;
101};
102
103struct Message : public QQmlJS::DiagnosticMessage
104{
106
107 // This doesn't need to be an owning-reference since the string is expected to outlive any
108 // Message object by virtue of coming from a LoggerWarningId.
113
114 quint32 lineForDisabling() const { return customLineForDisabling.value_or(loc.startLine); }
115};
116
117class Q_QMLCOMPILER_EXPORT QQmlJSLogger
118{
119 Q_DISABLE_COPY_MOVE(QQmlJSLogger)
120public:
121 QList<QQmlJS::LoggerCategory> categories() const;
123
124 void registerCategory(const QQmlJS::LoggerCategory &category);
125
126 QQmlJSLogger();
127 ~QQmlJSLogger() = default;
128
129 bool hasWarnings() const { return m_numWarnings > 0; }
130 bool hasErrors() const { return m_numErrors > 0; }
131
132 qsizetype numWarnings() const { return m_numWarnings; }
133 qsizetype numErrors() const { return m_numErrors; }
134
135 template<typename F>
137 {
138 for (const Message &msg : m_currentFunctionMessages)
139 f(msg);
140 }
141
142 template<typename F>
143 void iterateAllMessages(F &&f) const
144 {
145 for (const Message &msg : m_archivedMessages)
146 f(msg);
147
148 for (const Message &msg : m_currentFunctionMessages)
149 f(msg);
150 }
151
152 QQmlJS::WarningSeverity categorySeverity(QQmlJS::LoggerWarningId id) const
153 {
154 return m_categorySeverities[id.name().toString()];
155 }
156 void setCategorySeverity(QQmlJS::LoggerWarningId id, QQmlJS::WarningSeverity severity)
157 {
158 m_categorySeverities[id.name().toString()] = severity;
159 m_categoryChanged[id.name().toString()] = true;
160 }
161
162 bool wasCategoryChanged(QQmlJS::LoggerWarningId id) const
163 {
164 return m_categoryChanged[id.name().toString()];
165 }
166
167 QQmlJS::WarningSeverity compileErrorSeverity() const { return m_compileErrorSeverity; }
168 void setCompileErrorSeverity(QQmlJS::WarningSeverity severity) { m_compileErrorSeverity = severity; }
169
170 QString compileErrorPrefix() const { return m_compileErrorPrefix; }
171 void setCompileErrorPrefix(const QString &prefix) { m_compileErrorPrefix = prefix; }
172
173 QString compileSkipPrefix() const { return m_compileSkipPrefix; }
174 void setCompileSkipPrefix(const QString &prefix) { m_compileSkipPrefix = prefix; }
175
176 /*! \internal
177
178 Logs \a message with severity deduced from \a category. Prefer using
179 this function in most cases.
180
181 \sa setCategorySeverity
182 */
183 void log(const QString &message, QQmlJS::LoggerWarningId id,
184 const QQmlJS::SourceLocation &srcLocation, bool showContext = true,
185 bool showFileName = true, const std::optional<QQmlJSFixSuggestion> &suggestion = {},
186 std::optional<quint32> customLineForDisabling = std::nullopt)
187 {
188 const auto &severityForCategory = m_categorySeverities[id.name().toString()];
189 if (severityForCategory == QQmlJS::WarningSeverity::Disable)
190 return;
191
192 log(Message {
193 QQmlJS::DiagnosticMessage {
194 message,
195 QtMsgType(severityForCategory),
196 srcLocation,
197 },
198 id.name(),
199 suggestion,
200 Message::CompilationStatus::Normal,
201 customLineForDisabling
202 }, showContext, showFileName);
203 }
204
205 void logCompileError(const QString &message, const QQmlJS::SourceLocation &srcLocation)
206 {
207 if (m_compileErrorSeverity == QQmlJS::WarningSeverity::Disable)
208 return;
209
210 if (m_inTransaction)
211 m_hasPendingCompileError = true;
212 else
213 m_hasCompileError = true;
214
215 log(Message {
216 QQmlJS::DiagnosticMessage {
217 m_compileErrorPrefix + message,
218 QtMsgType(m_compileErrorSeverity), // OK, as the severity can't be Disable
219 srcLocation
220 },
221 qmlCompiler.name(),
222 {}, // fixSuggestion
223 Message::CompilationStatus::Error
224 });
225
226 }
227
228 void logCompileSkip(const QString &message, const QQmlJS::SourceLocation &srcLocation)
229 {
230 if (m_compileSkipSeverity == QQmlJS::WarningSeverity::Disable)
231 return;
232
233 m_hasCompileSkip = true;
234 log(Message {
235 QQmlJS::DiagnosticMessage {
236 m_compileSkipPrefix + message,
237 QtMsgType(m_compileSkipSeverity), // OK, as the severity can't be Disable
238 srcLocation
239 },
240 qmlCompiler.name(),
241 {}, // fixSuggestion
242 Message::CompilationStatus::Skip
243 });
244 }
245
246 void processMessages(QSpan<const QQmlJS::DiagnosticMessage> messages,
247 const QQmlJS::LoggerWarningId id,
248 const QQmlJS::SourceLocation &sourceLocation = QQmlJS::SourceLocation{});
249
250 void ignoreWarnings(uint32_t line, const QSet<QString> &categories)
251 {
252 m_ignoredWarnings[line] = categories;
253 }
254
255 void setSilent(bool silent) { m_output.setSilent(silent); }
256 bool isSilent() const { return m_output.isSilent(); }
257
258 /*!
259 \internal
260 The logger is disabled when warnings are not relevant, for example when the import visitor runs
261 on a dependency of a linted file. In that case, the warnings should not be created, and
262 expensive QQmlJSUtils::didYouMean call can be saved.
263
264 setSilent() has a different behavior: a silent logger can still be used to process messages as
265 JSON, for example, while a disabled logger won't contain any message.
266 */
267 void setIsDisabled(bool isDisabled) { m_isDisabled = isDisabled; }
268 bool isDisabled() const { return m_isDisabled; }
269
270 void setCode(const QString &code) { m_code = code; }
271 QString code() const { return m_code; }
272
273 void setFilePath(const QString &filePath) { m_filePath = filePath; }
274 QString filePath() const { return m_filePath; }
275
277 {
278 return m_hasCompileError || m_hasPendingCompileError;
279 }
280
282 {
283 return m_hasCompileSkip;
284 }
285
290
292 {
293 for (const Message &message : m_currentFunctionMessages) {
294 if (message.compilationStatus == Message::CompilationStatus::Error)
295 return message.message;
296 }
297
298 return QString();
299 }
300
302 {
303 for (const Message &message : m_currentFunctionMessages) {
304 if (message.compilationStatus == Message::CompilationStatus::Skip)
305 return message.message;
306 }
307
308 return QString();
309 }
310
311 void startTransaction();
312 void commit();
313 void rollback();
314
315 void finalizeFunction();
316
317private:
318 QMap<QString, QQmlJS::LoggerCategory> m_categories;
319
320 void printContext(const QQmlJS::SourceLocation &location);
321 void printFix(const QQmlJSFixSuggestion &fix);
322
323 void log(Message &&diagMsg, bool showContext = false, bool showFileName = true);
324
325 void countMessage(const Message &message);
326
327 QString m_filePath;
328 QString m_code;
329
330 QColorOutput m_output;
331
332 QHash<QString, QQmlJS::WarningSeverity> m_categorySeverities;
333 QHash<QString, bool> m_categoryChanged;
334
335 QList<Message> m_pendingMessages;
336 QList<Message> m_currentFunctionMessages;
337 QList<Message> m_archivedMessages;
338 QHash<uint32_t, QSet<QString>> m_ignoredWarnings;
339
340 QString m_compileErrorPrefix;
341 QString m_compileSkipPrefix;
342
343 qsizetype m_numWarnings = 0;
344 qsizetype m_numErrors = 0;
345 bool m_inTransaction = false;
346 bool m_hasCompileError = false;
347 bool m_hasPendingCompileError = false;
348 bool m_hasCompileSkip = false;
349 bool m_isDisabled = false;
350
353};
354
355QT_END_NAMESPACE
356
357#endif // QQMLJSLOGGER_P_H
[custom type definition]
std::optional< QQmlJSFixSuggestion > fixSuggestion
CompilationStatus compilationStatus
quint32 lineForDisabling() const
QAnyStringView id
std::optional< quint32 > customLineForDisabling
friend bool operator==(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are equal, otherwise returns false.
Definition qbytearray.h:807
friend bool operator!=(const QByteArray::FromBase64Result &lhs, const QByteArray::FromBase64Result &rhs) noexcept
Returns true if lhs and rhs are different, otherwise returns false.
Definition qbytearray.h:818
bool isValid() const
QString fileName() const
If the currently assigned device is a QFile, or if setFileName() has been called, this function retur...
void setFileName(const QString &fileName)
Sets the file name of QImageReader to fileName.
virtual Type type() const =0
Reimplement this function to return the paint engine \l{Type}.
virtual bool isValid() const
virtual QString location() const
bool isDisabled() const
QString code() const
void logCompileSkip(const QString &message, const QQmlJS::SourceLocation &srcLocation)
bool currentFunctionWasSkipped() const
bool isSilent() const
QString compileSkipPrefix() const
qsizetype numErrors() const
QQmlJS::WarningSeverity compileErrorSeverity() const
void setCode(const QString &code)
bool currentFunctionHasErrorOrSkip() const
void setFilePath(const QString &filePath)
void setCategorySeverity(QQmlJS::LoggerWarningId id, QQmlJS::WarningSeverity severity)
bool currentFunctionHasCompileError() const
void log(const QString &message, QQmlJS::LoggerWarningId id, const QQmlJS::SourceLocation &srcLocation, bool showContext=true, bool showFileName=true, const std::optional< QQmlJSFixSuggestion > &suggestion={}, std::optional< quint32 > customLineForDisabling=std::nullopt)
bool hasWarnings() const
void logCompileError(const QString &message, const QQmlJS::SourceLocation &srcLocation)
void setSilent(bool silent)
QQmlJS::WarningSeverity categorySeverity(QQmlJS::LoggerWarningId id) const
bool wasCategoryChanged(QQmlJS::LoggerWarningId id) const
void startTransaction()
void processMessages(QSpan< const QQmlJS::DiagnosticMessage > messages, const QQmlJS::LoggerWarningId id, const QQmlJS::SourceLocation &sourceLocation=QQmlJS::SourceLocation{})
QString currentFunctionCompileErrorMessage() const
void iterateCurrentFunctionMessages(F &&f) const
void finalizeFunction()
QString compileErrorPrefix() const
void iterateAllMessages(F &&f) const
qsizetype numWarnings() const
void setIsDisabled(bool isDisabled)
void setCompileErrorPrefix(const QString &prefix)
QString currentFunctionCompileSkipMessage() const
QString filePath() const
static const QList< QQmlJS::LoggerCategory > & builtinCategories()
bool hasErrors() const
void setCompileErrorSeverity(QQmlJS::WarningSeverity severity)
void setCompileSkipPrefix(const QString &prefix)
void registerCategory(const QQmlJS::LoggerCategory &category)
void ignoreWarnings(uint32_t line, const QSet< QString > &categories)
QString typeName() const
void setIsFlag(bool isFlag)
void setLineNumber(int lineNumber)
friend bool operator!=(const QQmlJSMetaEnum &a, const QQmlJSMetaEnum &b)
void setName(const QString &name)
QQmlJSMetaEnum()=default
int lineNumber() const
friend size_t qHash(const QQmlJSMetaEnum &e, size_t seed=0)
friend bool operator==(const QQmlJSMetaEnum &a, const QQmlJSMetaEnum &b)
void setTypeName(const QString &typeName)
bool hasKey(const QString &key) const
void setIsScoped(bool v)
void setType(const QSharedPointer< const QQmlJSScope > &type)
QSharedPointer< const QQmlJSScope > type() const
int value(const QString &key) const
bool isQml() const
void setIsQml(bool v)
void addValue(int value)
bool isScoped() const
QList< int > values() const
bool isFlag() const
QString alias() const
QStringList keys() const
bool isValid() const
void addKey(const QString &key)
void setAlias(const QString &alias)
QString name() const
QQmlJSMetaEnum(QString name)
bool hasValues() const
QQmlJSMetaReturnType returnValue() const
QQmlJSMetaMethod()=default
void setReturnType(QWeakPointer< const QQmlJSScope > type)
void setSourceLocation(QQmlJS::SourceLocation location)
QQmlJS::SourceLocation sourceLocation() const
QString methodName() const
QQmlJSMetaMethodType MethodType
void setMethodName(const QString &name)
void setReturnTypeName(const QString &typeName)
QString returnTypeName() const
QQmlJSMetaMethod(QString name, QString returnType=QString())
QList< QQmlJSMetaParameter > parameters() const
void setReturnValue(const QQmlJSMetaReturnType returnValue)
QSharedPointer< const QQmlJSScope > returnType() const
void setIsPointer(bool isPointer)
void setType(QWeakPointer< const QQmlJSScope > type)
void setIsList(bool isList)
friend bool operator!=(const QQmlJSMetaParameter &a, const QQmlJSMetaParameter &b)
friend size_t qHash(const QQmlJSMetaParameter &e, size_t seed=0)
void setName(const QString &name)
void setTypeName(const QString &typeName)
void setTypeQualifier(Constness typeQualifier)
Constness typeQualifier() const
QString typeName() const
QQmlJSMetaParameter(QString name=QString(), QString typeName=QString(), Constness typeQualifier=NonConst, QWeakPointer< const QQmlJSScope > type={})
friend bool operator==(const QQmlJSMetaParameter &a, const QQmlJSMetaParameter &b)
QSharedPointer< const QQmlJSScope > type() const
\inmodule QtQmlCompiler
friend bool operator!=(const QQmlJSMetaProperty &a, const QQmlJSMetaProperty &b)
QString notify() const
QSharedPointer< const QQmlJSScope > aliasTargetScope() const
QString aliasExpression() const
friend bool operator==(const QQmlJSMetaProperty &a, const QQmlJSMetaProperty &b)
void setIsOverride(bool isOverride)
void setPropertyName(const QString &propertyName)
QString aliasTargetName() const
void setAnnotations(const QList< QQmlJSAnnotation > &annotation)
void setIsList(bool isList)
QString bindable() const
QSharedPointer< const QQmlJSScope > type() const
void setPrivateClass(const QString &privateClass)
void setRead(const QString &read)
friend size_t qHash(const QQmlJSMetaProperty &prop, size_t seed=0)
void setBindable(const QString &bindable)
void setWrite(const QString &write)
void setIsPropertyConstant(bool isPropertyConstant)
QString reset() const
void setRevision(int revision)
void setIsFinal(bool isFinal)
QString typeName() const
void setAliasTargetScope(const QSharedPointer< const QQmlJSScope > &scope)
void setSourceLocation(const QQmlJS::SourceLocation &newSourceLocation)
QString write() const
void setIsTypeConstant(bool isTypeConstant)
const QList< QQmlJSAnnotation > & annotations() const
QQmlJS::SourceLocation sourceLocation() const
void setTypeName(const QString &typeName)
QQmlJSMetaProperty()=default
void setReset(const QString &reset)
QString privateClass() const
void setIsVirtual(bool isVirtual)
void setIsWritable(bool isWritable)
void setAliasExpression(const QString &aliasString)
void setAliasTargetName(const QString &name)
void setIndex(int index)
void setNotify(const QString &notify)
bool isPropertyConstant() const
bool isTypeConstant() const
void setType(const QSharedPointer< const QQmlJSScope > &type)
QString propertyName() const
void setIsPointer(bool isPointer)
QQmlJSRegisterContent createMethod(const QList< QQmlJSMetaMethod > &methods, const QQmlJSScope::ConstPtr &methodType, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createImportNamespace(uint importNamespaceStringId, const QQmlJSScope::ConstPtr &importNamespaceType, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createProperty(const QQmlJSMetaProperty &property, int baseLookupIndex, int resultLookupIndex, ContentVariant variant, QQmlJSRegisterContent scope)
void adjustType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &adjusted)
void generalizeType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &generalized)
void storeType(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &stored)
QQmlJSRegisterContent castTo(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newContainedType)
QQmlJSRegisterContent createEnumeration(const QQmlJSMetaEnum &enumeration, const QString &enumMember, ContentVariant variant, QQmlJSRegisterContent scope)
void setAllocationMode(AllocationMode mode)
QQmlJSRegisterContent storedIn(QQmlJSRegisterContent content, const QQmlJSScope::ConstPtr &newStoredType)
QQmlJSRegisterContent clone(QQmlJSRegisterContent from)
QQmlJSRegisterContent createType(const QQmlJSScope::ConstPtr &type, int resultLookupIndex, ContentVariant variant, QQmlJSRegisterContent scope={})
QQmlJSRegisterContent createConversion(const QList< QQmlJSRegisterContent > &origins, const QQmlJSScope::ConstPtr &conversion, QQmlJSRegisterContent conversionScope, ContentVariant variant, QQmlJSRegisterContent scope)
QQmlJSRegisterContent createMethodCall(const QQmlJSMetaMethod &method, const QQmlJSScope::ConstPtr &returnType, QQmlJSRegisterContent scope)
Tracks the types for the QmlCompiler.
QTypeRevision revision() const
QString type() const
QTypeRevision version() const
bool isValid() const
QString package() const
Export()=default
Export(QString package, QString type, QTypeRevision version, QTypeRevision revision)
virtual QQmlSourceLocation sourceLocation() const
static BindingPrivate * get(Binding *binding)
Definition qqmlsa_p.h:89
static QQmlJSMetaPropertyBinding binding(QQmlSA::Binding &binding)
Definition qqmlsa.cpp:320
Element bindingScope() const
Definition qqmlsa_p.h:98
void setPropertyName(QString name)
Definition qqmlsa_p.h:96
static QQmlSA::Binding createBinding(const QQmlJSMetaPropertyBinding &)
Definition qqmlsa.cpp:313
static const QQmlJSMetaPropertyBinding binding(const QQmlSA::Binding &binding)
Definition qqmlsa.cpp:325
bool isAttached() const
Definition qqmlsa_p.h:101
void setIsAttached(bool isAttached)
Definition qqmlsa_p.h:102
BindingPrivate(Binding *, const BindingPrivate &)
Definition qqmlsa.cpp:307
void setBindingScope(Element bindingScope)
Definition qqmlsa_p.h:99
static const BindingPrivate * get(const Binding *binding)
Definition qqmlsa_p.h:90
\inmodule QtQmlCompiler
Definition qqmlsa.h:52
Element attachedType() const
Returns the attached type if the content type of this binding is AttachedProperty,...
Definition qqmlsa.cpp:384
BindingType bindingType() const
Returns the type of this binding.
Definition qqmlsa.cpp:350
Element bindingScope() const
Returns the Element scope in which the binding is defined.
Definition qqmlsa.cpp:342
friend bool operator!=(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are not equal, and false otherwise.
Definition qqmlsa.h:106
bool hasUndefinedScriptValue() const
Returns whether this binding has script value type undefined like when it is assigned undefined.
Definition qqmlsa.cpp:451
Binding(const Binding &)
Creates a copy of other.
Definition qqmlsa.cpp:254
Binding & operator=(const Binding &)
Assigns other to this Binding instance.
Definition qqmlsa.cpp:266
bool isAttached() const
Returns true if this type is attached to another one, false otherwise.
Definition qqmlsa.cpp:375
bool hasObject() const
Returns true if this binding has an objects, otherwise returns false.
Definition qqmlsa.cpp:432
friend bool operator==(const Binding &lhs, const Binding &rhs)
Returns true if lhs and rhs are equal, and false otherwise.
Definition qqmlsa.h:102
static bool isLiteralBinding(BindingType)
Returns true if bindingType is a literal type, and false otherwise.
Definition qqmlsa.cpp:475
QString propertyName() const
Returns the name of the property bound with this binding.
Definition qqmlsa.cpp:367
Binding()
Constructs a new Binding object.
Definition qqmlsa.cpp:247
QString stringValue() const
Returns the associated string literal if the content type of this binding is StringLiteral,...
Definition qqmlsa.cpp:359
Element objectType() const
Returns the type of the associated object if the content type of this binding is Object,...
Definition qqmlsa.cpp:441
Binding & operator=(Binding &&) noexcept
Move-assigns other to this Binding instance.
Definition qqmlsa.cpp:282
QQmlSA::SourceLocation sourceLocation() const
Returns the location in the QML code where this binding is defined.
Definition qqmlsa.cpp:405
ScriptBindingKind scriptKind() const
Returns the kind of the associated script if the content type of this binding is Script,...
Definition qqmlsa.cpp:424
double numberValue() const
Returns the associated number if the content type of this binding is NumberLiteral,...
Definition qqmlsa.cpp:415
Element groupType() const
Returns the type of the property of this binding if it is a group property, otherwise returns an inva...
Definition qqmlsa.cpp:334
bool hasFunctionScriptValue() const
Returns whether this binding has script value type function like when it is assigned a (lambda) metho...
Definition qqmlsa.cpp:464
QMultiHash< QString, Binding >::const_iterator constBegin() const
Definition qqmlsa.cpp:213
BindingsPrivate(QQmlSA::Binding::Bindings *, const BindingsPrivate &)
Definition qqmlsa.cpp:189
friend class QT_PREPEND_NAMESPACE(QQmlJSMetaPropertyBinding)
QMultiHash< QString, Binding >::const_iterator constEnd() const
Definition qqmlsa.cpp:232
\inmodule QtQmlCompiler
Definition qqmlsa.h:368
\inmodule QtQmlCompiler
Definition qqmlsa.h:202
QQmlSA::SourceLocation location() const
Definition qqmlsa.cpp:1979
QString description() const
Definition qqmlsa.cpp:1974
void setFileName(const QString &)
Definition qqmlsa.cpp:1989
FixSuggestionPrivate(FixSuggestion *, const QString &description, const QQmlSA::SourceLocation &location, const QString &replacement)
Definition qqmlsa.cpp:1954
FixSuggestionPrivate(FixSuggestion *)
Definition qqmlsa.cpp:1952
void setAutoApplicable(bool autoApplicable=true)
Definition qqmlsa.cpp:1999
static const QQmlJSFixSuggestion & fixSuggestion(const QQmlSA::FixSuggestion &)
Definition qqmlsa.cpp:2014
FixSuggestionPrivate(FixSuggestion *, FixSuggestionPrivate &&)
Definition qqmlsa.cpp:1969
QString replacement() const
Definition qqmlsa.cpp:1984
static QQmlJSFixSuggestion & fixSuggestion(QQmlSA::FixSuggestion &)
Definition qqmlsa.cpp:2009
FixSuggestionPrivate(FixSuggestion *, const FixSuggestionPrivate &)
Definition qqmlsa.cpp:1963
\inmodule QtQmlCompiler
Definition qqmlsa.h:377
FixSuggestion(const FixSuggestion &)
Creates a copy of other.
Definition qqmlsa.cpp:2039
QString description() const
Returns the description of the fix.
Definition qqmlsa.cpp:2084
QString replacement() const
Returns the fix that will replace the problematic source code.
Definition qqmlsa.cpp:2102
bool isAutoApplicable() const
Returns whether this suggested fix can be applied automatically.
Definition qqmlsa.cpp:2137
void setAutoApplicable(bool autoApplicable=true)
Sets autoApplicable to determine whether this suggested fix can be applied automatically.
Definition qqmlsa.cpp:2128
\inmodule QtQmlCompiler
Definition qqmlsa.h:283
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id)
Emits a warning message diagnostic about an issue of type id.
Definition qqmlsa.cpp:1269
Element resolveLiteralType(const Binding &binding)
Returns the element representing the type of literal in binding.
Definition qqmlsa.cpp:1381
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id, QQmlSA::SourceLocation srcLocation, const QQmlSA::FixSuggestion &fix)
Emits a warning message diagnostic about an issue of type id located at srcLocation and with suggeste...
Definition qqmlsa.cpp:1292
void emitWarning(QAnyStringView diagnostic, LoggerWarningId id, QQmlSA::SourceLocation srcLocation)
Emits warning message diagnostic about an issue of type id located at srcLocation.
Definition qqmlsa.cpp:1278
Element resolveBuiltinType(QAnyStringView typeName) const
Returns the type of the built-in type identified by typeName.
Definition qqmlsa.cpp:1353
Element resolveAttached(QAnyStringView moduleName, QAnyStringView typeName)
Returns the attached type of typeName defined in module moduleName.
Definition qqmlsa.cpp:1371
QString resolveElementToId(const Element &element, const Element &context)
Returns the id of element in a given context.
Definition qqmlsa.cpp:1404
Element resolveTypeInFileScope(QAnyStringView typeName)
Returns the type corresponding to typeName inside the currently analysed file.
Definition qqmlsa.cpp:1307
QString sourceCode(QQmlSA::SourceLocation location)
Returns the source code located within location.
Definition qqmlsa.cpp:1416
Element resolveAttachedInFileScope(QAnyStringView typeName)
Returns the attached type corresponding to typeName used inside the currently analysed file.
Definition qqmlsa.cpp:1319
Element resolveIdToElement(QAnyStringView id, const Element &context)
Returns the element in context that has id id.
Definition qqmlsa.cpp:1392
Element resolveType(QAnyStringView moduleName, QAnyStringView typeName)
Returns the type of typeName defined in module moduleName.
Definition qqmlsa.cpp:1337
\inmodule QtQmlCompiler
Definition qqmlsa.h:340
MethodPrivate(Method *, const MethodPrivate &)
Definition qqmlsa.cpp:563
QQmlSA::SourceLocation sourceLocation() const
Definition qqmlsa.cpp:573
static QQmlSA::Method createMethod(const QQmlJSMetaMethod &)
Definition qqmlsa.cpp:680
MethodType methodType() const
Definition qqmlsa.cpp:578
static QQmlJSMetaMethod method(const QQmlSA::Method &)
Definition qqmlsa.cpp:701
QString methodName() const
Definition qqmlsa.cpp:568
\inmodule QtQmlCompiler
Definition qqmlsa.h:120
Method & operator=(Method &&) noexcept
Move-assigns other to this Method instance.
Definition qqmlsa.cpp:624
MethodType methodType() const
Returns the type of this method.
Definition qqmlsa.cpp:651
Method(const Method &)
Creates a copy of other.
Definition qqmlsa.cpp:598
Method()
Constructs a new Method object.
Definition qqmlsa.cpp:593
Method & operator=(const Method &)
Assigns other to this Method instance.
Definition qqmlsa.cpp:611
QString methodName() const
Returns the name of the this method.
Definition qqmlsa.cpp:642
MethodsPrivate(QQmlSA::Method::Methods *, MethodsPrivate &&)
Definition qqmlsa.cpp:556
static QQmlSA::Method::Methods createMethods(const QMultiHash< QString, QQmlJSMetaMethod > &)
Definition qqmlsa.cpp:689
QMultiHash< QString, Method >::const_iterator constEnd() const
Definition qqmlsa.cpp:544
MethodsPrivate(QQmlSA::Method::Methods *, const MethodsPrivate &)
Definition qqmlsa.cpp:551
QMultiHash< QString, Method >::const_iterator constBegin() const
Definition qqmlsa.cpp:525
\inmodule QtQmlCompiler
Definition qqmlsa.h:314
void analyze(const Element &root)
Runs the element passes over root and all its children.
Definition qqmlsa.cpp:1605
bool isCategoryEnabled(LoggerWarningId category) const
Returns true if warnings of category are enabled, false otherwise.
Definition qqmlsa.cpp:1716
bool registerPropertyPass(std::shared_ptr< PropertyPass > pass, QAnyStringView moduleName, QAnyStringView typeName, QAnyStringView propertyName=QAnyStringView(), bool allowInheritance=true)
Registers a static analysis pass for properties.
Definition qqmlsa.cpp:1508
std::unordered_map< quint32, Binding > bindingsByLocation() const
Returns bindings by their source location.
Definition qqmlsa.cpp:1946
bool hasImportedModule(QAnyStringView name) const
Returns true if the module named module has been imported by the QML to be analyzed,...
Definition qqmlsa.cpp:1708
PropertyPassBuilder(PassManager *passManager)
Definition qqmlsa_p.h:336
\inmodule QtQmlCompiler
Definition qqmlsa.h:351
\inmodule QtQmlCompiler
Definition qqmlsa_p.h:156
static QQmlSA::Property createProperty(const QQmlJSMetaProperty &)
Definition qqmlsa.cpp:756
PropertyPrivate(Property *, const PropertyPrivate &)
Definition qqmlsa.cpp:713
PropertyPrivate(Property *, PropertyPrivate &&)
Definition qqmlsa.cpp:718
static QQmlJSMetaProperty property(const QQmlSA::Property &property)
Definition qqmlsa.cpp:751
QQmlSA::Element type() const
Returns the type that this property was defined with.
Definition qqmlsa.cpp:746
bool isValid() const
Definition qqmlsa.cpp:728
QString typeName() const
Definition qqmlsa.cpp:723
bool isReadonly() const
Returns whether this property is readonly.
Definition qqmlsa.cpp:738
\inmodule QtQmlCompiler
Definition qqmlsa.h:169
Property(const Property &)
Creates a copy of other.
Definition qqmlsa.cpp:779
QString typeName() const
Returns the name of the type of this property.
Definition qqmlsa.cpp:824
bool isReadonly() const
Returns true if this property is read-only, false otherwise.
Definition qqmlsa.cpp:842
QQmlSA::WarningSeverity WarningSeverity
\inmodule QtQmlCompiler
MethodType
Definition qqmlsa.h:48
Q_QMLCOMPILER_EXPORT void emitWarningWithOptionalFix(GenericPass &pass, QAnyStringView diagnostic, const LoggerWarningId &id, const QQmlSA::SourceLocation &srcLocation, const std::optional< QQmlJSFixSuggestion > &fix)
Definition qqmlsa.cpp:2157
bool isRegularBindingType(BindingType type)
Definition qqmlsa.cpp:2173
constexpr bool isFunctionScope(ScopeType type)
AccessSemantics
Definition qqmlsa.h:49
@ HasBaseTypeError
Definition qqmlsa_p.h:43
@ InlineComponent
Definition qqmlsa_p.h:41
@ HasExtensionNamespace
Definition qqmlsa_p.h:44
@ WrappedInImplicitComponent
Definition qqmlsa_p.h:42
Combined button and popup list for selecting options.
static auto getQQmlJSScopeFromSmartPtr(const From &p) -> From
Q_DECLARE_INTERFACE(QNetworkAccessBackendFactory, QNetworkAccessBackendFactory_iid)
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
static QString toNumericString(double value)
static QString messageTypeForMethod(const QString &method)
static QString derefContentPointer(const QString &contentPointer)
static bool canTypeBeAffectedBySideEffects(const QQmlJSTypeResolver *typeResolver, const QQmlJSRegisterContent &baseType)
#define BYTECODE_UNIMPLEMENTED()
#define INJECT_TRACE_INFO(function)
#define REJECT
static QString registerName(int registerIndex, int offset)
static QString minExpression(int argc)
static QString maxExpression(int argc)
static bool isTypeStorable(const QQmlJSTypeResolver *resolver, const QQmlJSScope::ConstPtr &type)
QQmlSA::MethodType QQmlJSMetaMethodType
QQmlJSMetaParameter QQmlJSMetaReturnType
ScriptBindingValueType
@ ScriptValue_Function
@ ScriptValue_Unknown
@ ScriptValue_Undefined
#define QmlLintPluginInterface_iid
Definition qqmlsa.h:417
QList< Export > exports
QTypeRevision revision
static void onWriteDefault(PropertyPass *, const Element &, const QString &, const Element &, const Element &, SourceLocation)
Definition qqmlsa_p.h:296
static void onBindingDefault(PropertyPass *, const Element &, const QString &, const Binding &, const Element &, const Element &)
Definition qqmlsa_p.h:284
void onRead(const Element &element, const QString &propertyName, const Element &readScope, SourceLocation location) override
Executes whenever a property is read.
Definition qqmlsa_p.h:311
static void onCallDefault(PropertyPass *, const Element &, const QString &, const Element &, SourceLocation)
Definition qqmlsa_p.h:292
void onBinding(const Element &element, const QString &propertyName, const Binding &binding, const Element &bindingScope, const Element &value) override
Executes whenever a property gets bound to a value.
Definition qqmlsa_p.h:306
void onCall(const Element &element, const QString &propertyName, const Element &readScope, SourceLocation location) override
Executes whenever a property or method is called.
Definition qqmlsa_p.h:316
static void onReadDefault(PropertyPass *, const Element &, const QString &, const Element &, SourceLocation)
Definition qqmlsa_p.h:288
void onWrite(const Element &element, const QString &propertyName, const Element &value, const Element &writeScope, SourceLocation location) override
Executes whenever a property is written to.
Definition qqmlsa_p.h:321
std::shared_ptr< QQmlSA::PropertyPass > pass
Definition qqmlsa_p.h:51