5#ifndef QQMLDIRPARSER_P_H
6#define QQMLDIRPARSER_P_H
20#include <QtCore/QHash>
21#include <QtCore/QDebug>
22#include <QtCore/QTypeRevision>
23#include <private/qtqmlcompilerglobal_p.h>
24#include <private/qqmljsdiagnosticmessage_p.h>
33 bool parse(
const QString &source);
34 void disambiguateFileSelectors();
36 bool hasError()
const {
return !_errors.isEmpty(); }
37 void setError(
const QQmlJS::DiagnosticMessage &);
38 QList<QQmlJS::DiagnosticMessage> errors(
const QString &uri)
const;
40 bool hasTypeNamespace()
const {
return !_typeNamespace.isEmpty(); }
41 QString typeNamespace()
const {
return _typeNamespace; }
42 void setTypeNamespace(
const QString &s) { _typeNamespace = s; }
44 static void checkNonRelative(
const char *item,
const QString &typeName,
const QString &fileName)
46 if (fileName.startsWith(QLatin1Char(
'/'))) {
47 qWarning() << item << typeName
48 <<
"is specified with non-relative URL" << fileName <<
"in a qmldir file."
49 <<
"URLs in qmldir files should be relative to the qmldir file's directory.";
57 Plugin(
const QString &name,
const QString &path,
bool optional)
58 : name(name), path(path), optional(optional)
60 checkNonRelative(
"Plugin", name, path);
65 bool optional =
false;
70 Component() =
default;
72 Component(
const QString &typeName,
const QString &fileName, QTypeRevision version)
73 : typeName(typeName), fileName(fileName), version(version),
74 internal(
false), singleton(
false)
76 checkNonRelative(
"Component", typeName, fileName);
81 QTypeRevision version = QTypeRevision::zero();
82 bool internal =
false;
83 bool singleton =
false;
90 Script(
const QString &nameSpace,
const QString &fileName, QTypeRevision version)
91 : nameSpace(nameSpace), fileName(fileName), version(version)
93 checkNonRelative(
"Script", nameSpace, fileName);
98 QTypeRevision version = QTypeRevision::zero();
110 Q_DECLARE_FLAGS(Flags, Flag)
113 Import(QString module, QTypeRevision version, Flags flags)
114 : module(module), version(version), flags(flags)
119 QTypeRevision version;
122 friend bool comparesEqual(
const Import &a,
const Import &b)
noexcept
124 return a.module == b.module && a.version == b.version && a.flags == b.flags;
126 Q_DECLARE_EQUALITY_COMPARABLE(Import)
129 QMultiHash<QString,Component> components()
const {
return _components; }
130 QList<Import> dependencies()
const {
return _dependencies; }
131 QList<Import> imports()
const {
return _imports; }
132 QList<Script> scripts()
const {
return _scripts; }
133 QList<Plugin> plugins()
const {
return _plugins; }
134 bool designerSupported()
const {
return _designerSupported; }
138 bool isStaticModule()
const {
return _isStaticModule; }
141 bool isSystemModule()
const {
return _isSystemModule; }
143 QStringList typeInfos()
const {
return _typeInfos; }
144 QStringList classNames()
const {
return _classNames; }
145 QString preferredPath()
const {
return _preferredPath; }
146 QString linkTarget()
const {
return _linkTarget; }
149 bool maybeAddComponent(
const QString &typeName,
const QString &fileName,
const QString &version, QHash<QString,Component> &hash,
int lineNumber = -1,
bool multi =
true);
150 void reportError(quint16 line, quint16 column,
const QString &message);
151 QString scanQuotedWord(
const QChar *&ch, quint16 lineNumber, quint16 columnNumber);
152 void insertComponentOrScript(
153 const QString &name,
const QString &fileName, QTypeRevision version);
156 QList<QQmlJS::DiagnosticMessage> _errors;
157 QString _typeNamespace;
158 QString _preferredPath;
159 QMultiHash<QString,Component> _components;
160 QList<Import> _dependencies;
161 QList<Import> _imports;
162 QList<Script> _scripts;
163 QList<Plugin> _plugins;
164 bool _designerSupported =
false;
165 bool _isStaticModule =
false;
166 bool _isSystemModule =
false;
167 QStringList _typeInfos;
168 QStringList _classNames;
172using QQmlDirComponents = QMultiHash<QString,QQmlDirParser::Component>;
173using QQmlDirScripts = QList<QQmlDirParser::Script>;
174using QQmlDirPlugins = QList<QQmlDirParser::Plugin>;
175using QQmlDirImports = QList<QQmlDirParser::Import>;
Combined button and popup list for selecting options.
static void scanSpace(const QChar *&ch)
static void disambiguateFileSelectedScripts(QQmlDirScripts *scripts)
static QString scanWord(const QChar *&ch)
static QString pathWithoutFileSelectors(QString path, qsizetype firstPlus)
static void disambiguateFileSelectedComponents(QQmlDirComponents *components)
static void scanToEnd(const QChar *&ch)
static QTypeRevision parseVersion(const QString &str)
static bool canDisambiguate(const QString &fileName1, const QString &fileName2, QString *correctedFileName)
static QT_BEGIN_NAMESPACE int parseInt(QStringView str, bool *ok)
QDataStream & operator<<(QDataStream &stream, const QImage &image)
[0]