Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qqmlcodemodel_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 LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQMLCODEMODEL_P_H
5#define QQMLCODEMODEL_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qlanguageserver_p.h"
19#include "qtextdocument_p.h"
20
21#include <QObject>
22#include <QHash>
23#include <QtCore/qfilesystemwatcher.h>
24#include <QtCore/private/qfactoryloader_p.h>
25#include <QtQmlDom/private/qqmldomitem_p.h>
26#include <QtQmlCompiler/private/qqmljsscope_p.h>
27#include <QtQmlToolingSettings/private/qqmltoolingsettings_p.h>
28
29#include <functional>
30#include <memory>
31
34namespace QmlLsp {
35
58
60
62{
63public:
65 std::shared_ptr<Utils::TextDocument> textDocument;
66};
67
68struct ToIndex
69{
72};
73
75{
76 QByteArray resultId = "0";
77 QList<int> lastTokens;
78};
79
80class QQmlCodeModel : public QObject
81{
83public:
84 enum class UrlLookup { Caching, ForceLookup };
85 enum class State { Running, Stopping };
86
87 explicit QQmlCodeModel(QObject *parent = nullptr, QQmlToolingSettings *settings = nullptr);
91 OpenDocumentSnapshot snapshotByUrl(const QByteArray &url);
92 OpenDocument openDocumentByUrl(const QByteArray &url);
93
94 void openNeedUpdate();
95 void indexNeedsUpdate();
96 void addDirectoriesToIndex(const QStringList &paths, QLanguageServer *server);
97 void addOpenToUpdate(const QByteArray &);
98 void removeDirectory(const QString &path);
99 // void updateDocument(const OpenDocument &doc);
100 QString url2Path(const QByteArray &url, UrlLookup options = UrlLookup::Caching);
101 void newOpenFile(const QByteArray &url, int version, const QString &docText);
102 void newDocForOpenFile(const QByteArray &url, int version, const QString &docText);
103 void closeOpenFile(const QByteArray &url);
104 void setRootUrls(const QList<QByteArray> &urls);
105 QList<QByteArray> rootUrls() const;
106 void addRootUrls(const QList<QByteArray> &urls);
107 QStringList buildPathsForRootUrl(const QByteArray &url);
108 QStringList buildPathsForFileUrl(const QByteArray &url);
109 void setBuildPathsForRootUrl(QByteArray url, const QStringList &paths);
110 QStringList importPaths() const { return m_importPaths; };
111 void setImportPaths(const QStringList &paths) { m_importPaths = paths; };
112 void removeRootUrls(const QList<QByteArray> &urls);
114 QStringList findFilePathsFromFileNames(const QStringList &fileNames) const;
115 static QStringList fileNamesToWatch(const QQmlJS::Dom::DomItem &qmlFile);
116 void disableCMakeCalls();
117 const QFactoryLoader &pluginLoader() const { return m_pluginLoader; }
118
119 RegisteredSemanticTokens &registeredTokens();
120 const RegisteredSemanticTokens &registeredTokens() const;
121
124private:
125 void indexDirectory(const QString &path, int depthLeft);
126 int indexEvalProgress() const; // to be called in the mutex
127 void indexStart(); // to be called in the mutex
128 void indexEnd(); // to be called in the mutex
129 void indexSendProgress(int progress);
130 bool indexCancelled();
131 bool indexSome();
132 void addDirectory(const QString &path, int leftDepth);
133 bool openUpdateSome();
134 void openUpdateStart();
135 void openUpdateEnd();
136 void openUpdate(const QByteArray &);
137
138 static bool callCMakeBuild(const QStringList &buildPaths);
139 void addFileWatches(const QQmlJS::Dom::DomItem &qmlFile);
140 enum CMakeStatus { RequiresInitialization, HasCMake, DoesNotHaveCMake };
141 void initializeCMakeStatus(const QString &);
142
143 mutable QMutex m_mutex;
144 State m_state = State::Running;
145 int m_lastIndexProgress = 0;
146 int m_nIndexInProgress = 0;
147 QList<ToIndex> m_toIndex;
148 int m_indexInProgressCost = 0;
149 int m_indexDoneCost = 0;
150 int m_nUpdateInProgress = 0;
151 QStringList m_importPaths;
152 QQmlJS::Dom::DomItem m_currentEnv;
153 QQmlJS::Dom::DomItem m_validEnv;
154 QByteArray m_lastOpenDocumentUpdated;
155 QSet<QByteArray> m_openDocumentsToUpdate;
156 QHash<QByteArray, QStringList> m_buildPathsForRootUrl;
157 QList<QByteArray> m_rootUrls;
158 QHash<QByteArray, QString> m_url2path;
159 QHash<QString, QByteArray> m_path2url;
160 QHash<QByteArray, OpenDocument> m_openDocuments;
161 QQmlToolingSettings *m_settings;
162 QFileSystemWatcher m_cppFileWatcher;
163 QFactoryLoader m_pluginLoader;
164 bool m_rebuildRequired = true; // always trigger a rebuild on start
165 CMakeStatus m_cmakeStatus = RequiresInitialization;
167private slots:
168 void onCppFileChanged(const QString &);
169};
170
171} // namespace QmlLsp
173#endif // QQMLCODEMODEL_P_H
\inmodule QtCore
Definition qbytearray.h:57
\inmodule QtCore\reentrant
Definition qdatetime.h:283
\inmodule QtCore
Implements a server for the language server protocol.
\inmodule QtCore
Definition qmutex.h:281
\inmodule QtCore
Definition qobject.h:103
Tracks the types for the QmlCompiler.
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
QQmlJSScope::ConstPtr scope
std::optional< int > scopeVersion
std::optional< int > docVersion
std::optional< int > validDocVersion
QDebug dump(QDebug dbg, DumpOptions dump=DumpOption::NoCode)
QQmlJS::Dom::DomItem validDoc
std::shared_ptr< Utils::TextDocument > textDocument
OpenDocumentSnapshot snapshot
QQmlToolingSettings * settings()
QQmlJS::Dom::DomItem currentEnv()
QQmlJS::Dom::DomItem validEnv()
const QFactoryLoader & pluginLoader() const
QStringList importPaths() const
void updatedSnapshot(const QByteArray &url)
void setImportPaths(const QStringList &paths)
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage return DBusPendingCall DBusPendingCall return DBusPendingCall return dbus_int32_t return DBusServer * server
#define Q_DECLARE_FLAGS(Flags, Enum)
Definition qflags.h:174
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags)
Definition qflags.h:194
GLsizei const GLuint * paths
GLsizei const GLchar *const * path
#define Q_OBJECT
#define slots
#define Q_SIGNALS
QSettings settings("MySoft", "Star Runner")
[0]
QUrl url("example.com")
[constructor-url-reference]
QStringList fileNames
[4]