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;
101 ModuleSettings m_moduleSettings;
102 QSet<QString> m_seenSettings;
115 explicit QQmlCodeModel(
const QByteArray &rootUrl = {}, QObject *parent =
nullptr,
116 QQmlToolingSharedSettings *settings =
nullptr);
129 void newOpenFile(
const QByteArray &url,
int version,
const QString &docText);
143 const QSet<QString> &alreadyWatchedFiles);
152 QMutexLocker l(&m_mutex);
153 return m_documentationRootPath;
159 QMutexLocker guard(&m_mutex);
160 return m_ignoreForWatching;
166 QMutexLocker guard(&m_mutex);
171 QMutexLocker guard(&m_mutex);
183 void addDirectory(
const QString &path,
int leftDepth);
186 void newDocForOpenFile(
const QByteArray &url,
int version,
const QString &docText,
188 bool openUpdateSome();
189 void openUpdate(
const QByteArray &,
UpdatePolicy policy);
191 void openUpdateStart();
192 void openUpdateEnd();
193 void openNeedUpdate();
194 QString url2Path(
const QByteArray &url, UrlLookup options = UrlLookup::Caching);
196 void callCMakeBuild(QProcessScheduler *scheduler);
197 void onCMakeProcessFinished(
const QByteArray &id);
199 void addFileWatches(
const QQmlJS::Dom::DomItem &qmlFile);
201 enum CMakeStatus { RequiresInitialization, HasCMake, DoesNotHaveCMake };
202 CMakeStatus cmakeStatus()
const
204 QMutexLocker guard(&m_mutex);
205 return m_cmakeStatus;
207 void setCMakeStatus(CMakeStatus status)
209 QMutexLocker guard(&m_mutex);
210 m_cmakeStatus = status;
213 mutable QMutex m_mutex;
214 const QByteArray m_rootUrl;
216 QQmlJS::Dom::DomItem m_currentEnv;
217 QQmlJS::Dom::DomItem m_validEnv;
218 QQmlToolingSharedSettings *m_settings;
219 HelpManager m_helpManager;
221 QThread* m_openUpdateThread =
nullptr;
222 QHash<QByteArray, UpdatePolicy> m_openDocumentsToUpdate;
223 QStringList m_buildPaths;
224 QStringList m_importPaths;
225 QStringList m_resourceFiles;
226 QHash<QByteArray, QString> m_url2path;
227 QHash<QString, QByteArray> m_path2url;
228 QHash<QByteArray, OpenDocument> m_openDocuments;
229 QFileSystemWatcher m_cppFileWatcher;
231 QString m_documentationRootPath;
232 QSet<QString> m_ignoreForWatching;
233 int m_nUpdateInProgress = 0;
234 CMakeStatus m_cmakeStatus = RequiresInitialization;
237 bool m_verbose =
false;
bool scopeDependenciesChanged
QQmlJSScope::ConstPtr scope
QDateTime scopeDependenciesLoadTime
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
void newOpenFile(const QByteArray &url, int version, const QString &docText)
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 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)
@ VersionLowerThanSnapshot
@ VersionLowerThanDocument
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)
QStringList resourceFiles
QmlHighlighting::HighlightsContainer highlights