5#ifndef QQMLCODEMODEL_P_H
6#define QQMLCODEMODEL_P_H
19#include <private/qlanguageserver_p.h>
20#include <private/qtextdocument_p.h>
21#include <private/qprocessscheduler_p.h>
22#include <private/qqmllshelputils_p.h>
23#include <private/qqmlsemantictokens_p.h>
27#include <QtCore/qfilesystemwatcher.h>
28#include <QtCore/private/qfactoryloader_p.h>
29#include <QtQmlDom/private/qqmldomitem_p.h>
30#include <QtQmlCompiler/private/qqmljsscope_p.h>
31#include <QtQmlToolingSettings/private/qqmltoolingsettings_p.h>
37class TextSynchronization;
68 auto asTuple()
const {
return std::make_tuple(sourceFolder, importPaths, resourceFiles); }
72 if (
auto result = compareThreeWay(a.sourceFolder, b.sourceFolder); is_neq(result))
74 if (
auto result = compareThreeWay(a.importPaths, b.importPaths); is_neq(result))
76 return compareThreeWay(a.resourceFiles, b.resourceFiles);
80 return a.asTuple() == b.asTuple();
120 explicit QQmlCodeModel(
const QByteArray &rootUrl = {}, QObject *parent =
nullptr,
121 QQmlToolingSharedSettings *settings =
nullptr);
134 void newOpenFile(
const QByteArray &url,
int version,
const QString &docText);
148 const QSet<QString> &alreadyWatchedFiles);
157 QMutexLocker l(&m_mutex);
158 return m_documentationRootPath;
164 QMutexLocker guard(&m_mutex);
165 return m_ignoreForWatching;
171 QMutexLocker guard(&m_mutex);
176 QMutexLocker guard(&m_mutex);
189 void addDirectory(
const QString &path,
int leftDepth);
192 void newDocForOpenFile(
const QByteArray &url,
int version,
const QString &docText,
194 bool openUpdateSome();
195 void openUpdate(
const QByteArray &,
UpdatePolicy policy);
197 void openUpdateStart();
198 void openUpdateEnd();
199 void openNeedUpdate();
200 QString url2Path(
const QByteArray &url, UrlLookup options = UrlLookup::Caching);
202 void callCMakeBuild(QProcessScheduler *scheduler);
204 void addFileWatches(
const QQmlJS::Dom::DomItem &qmlFile);
206 enum CMakeStatus { RequiresInitialization, HasCMake, DoesNotHaveCMake };
207 CMakeStatus cmakeStatus()
const
209 QMutexLocker guard(&m_mutex);
210 return m_cmakeStatus;
212 void setCMakeStatus(CMakeStatus status)
214 QMutexLocker guard(&m_mutex);
215 m_cmakeStatus = status;
218 mutable QMutex m_mutex;
219 const QByteArray m_rootUrl;
221 QQmlJS::Dom::DomItem m_currentEnv;
222 QQmlJS::Dom::DomItem m_validEnv;
223 QQmlToolingSharedSettings *m_settings;
224 HelpManager m_helpManager;
226 QThread* m_openUpdateThread =
nullptr;
227 QHash<QByteArray, UpdatePolicy> m_openDocumentsToUpdate;
228 QStringList m_buildPaths;
229 QStringList m_importPaths;
230 QStringList m_resourceFiles;
231 QHash<QByteArray, QString> m_url2path;
232 QHash<QString, QByteArray> m_path2url;
233 QHash<QByteArray, OpenDocument> m_openDocuments;
234 QFileSystemWatcher m_cppFileWatcher;
236 QString m_documentationRootPath;
237 QSet<QString> m_ignoreForWatching;
238 int m_nUpdateInProgress = 0;
239 CMakeStatus m_cmakeStatus = RequiresInitialization;
242 bool m_verbose =
false;
QDebug & dump(QDebug &dbg)
QQmlJSScope::ConstPtr scope
std::optional< int > docVersion
std::optional< int > validDocVersion
QQmlJS::Dom::DomItem validDoc
std::shared_ptr< Utils::TextDocument > textDocument
OpenDocumentSnapshot snapshot
void newOpenFile(const QByteArray &url, int version, const QString &docText)
void reloadAllOpenFiles()
void addOpenToUpdate(const QByteArray &, UpdatePolicy policy)
void setCMakeJobs(int jobs)
QQmlToolingSharedSettings * settings() const
static constexpr QLatin1String s_maxCMakeJobs
OpenDocumentSnapshot snapshotByUrl(const QByteArray &url)
QSet< QString > ignoreForWatching() const
static QStringList fileNamesToWatch(const QQmlJS::Dom::DomItem &qmlFile)
void tryEnableCMakeCalls(QProcessScheduler *scheduler)
void prepareForShutdown()
HelpManager * helpManager()
void setDocumentationRootPath(const QString &path)
static constexpr int s_defaultCMakeJobs
QByteArray rootUrl() const
QStringList importPaths() const
OpenDocument openDocumentByUrl(const QByteArray &url)
QStringList findFilePathsFromFileNames(const QStringList &fileNames, const QSet< QString > &alreadyWatchedFiles)
QQmlCodeModel(const QByteArray &rootUrl={}, QObject *parent=nullptr, QQmlToolingSharedSettings *settings=nullptr)
const RegisteredSemanticTokens & registeredTokens() const
QStringList buildPathsForFileUrl(const QByteArray &url)
QStringList importPathsForUrl(const QByteArray &)
QStringList resourceFiles() const
QQmlJS::Dom::DomItem currentEnv() const
QStringList buildPathsForOpenedFiles()
void setBuildPaths(const QStringList &paths)
void documentationRootPathChanged(const QString &path)
QString documentationRootPath() const
void setVerbose(bool verbose)
void openUpdateThreadFinished()
void closeOpenFile(const QByteArray &url)
QQmlJS::Dom::DomItem validEnv() const
RegisteredSemanticTokens & registeredTokens()
void removeDirectory(const QByteArray &)
void setImportPaths(const QStringList &paths)
void setResourceFiles(const QStringList &resourceFiles)
Combined button and popup list for selecting options.
static QStringList asStringList(const QVariant &variant)
static ModuleSetting * moduleSettingFor(const QString &sourceFolder, ModuleSettings *moduleSettings, UpdatePolicy policy)
VersionCheckResult checkVersion(const OpenDocument &doc, int version)
static QStringList withDependentBuildDirectories(QStringList &&buildPaths)
VersionCheckResultForValidDocument
@ VersionLowerThanValidSnapshot
@ VersionOkForValidDocument
static VersionCheckResultForValidDocument checkVersionForValidDocument(const OpenDocument &doc, int version)
static void loadWorkspacesV2(QSettings *settings, ModuleSettings *moduleSettings, UpdatePolicy policy)
@ VersionLowerThanSnapshot
@ VersionLowerThanDocument
static void handleArrayStartingAt0(QSettings *settings, ModuleSettings *moduleSettings, UpdatePolicy policy)
static void updateItemInSnapshot(const DomItem &item, const DomItem &validItem, const QByteArray &url, OpenDocument *doc, int version, UpdatePolicy policy)
static int cmakeJobsFromSettings(QQmlToolingSharedSettings *settings, const QString &rootPath, int defaultValue)
friend Qt::strong_ordering compareThreeWay(const ModuleSetting &a, const ModuleSetting &b) noexcept
QStringList resourceFiles
friend bool comparesEqual(const ModuleSetting &a, const ModuleSetting &b) noexcept
QmlHighlighting::HighlightsContainer highlights