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
qqmltoolingsettings_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 QQMLTOOLINGSETTINGS_P_H
6#define QQMLTOOLINGSETTINGS_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 <QtCore/qstring.h>
20#include <QtCore/qhash.h>
21#include <QtCore/qvariant.h>
22#include <QtCore/qmutex.h>
23#include <QtCore/qset.h>
24#include <QtCore/qdir.h>
25
26QT_BEGIN_NAMESPACE
27
28class QQmlToolingSettings
29{
30public:
31 QQmlToolingSettings(const QString &toolName,
32 const QStringList &recognizedIniSections = { QStringLiteral("General") });
33 struct SearchOptions
34 {
35 SearchOptions();
36 SearchOptions(const QString &settingFileName, bool reportFoundSettingsFiles = false,
37 bool isQmllintSilent = false);
38 QString settingsFileName;
39 bool reportFoundSettingsFiles = false;
40 bool isQmllintSilent = false;
41 };
42 struct SearchResult
43 {
44 enum class ResultType { Found, NotFound };
45 ResultType type = ResultType::NotFound;
46 QString iniFilePath;
47 bool isValid() const { return type == ResultType::Found && !iniFilePath.isEmpty(); }
48 };
49
50 class Searcher
51 {
52 public:
53 Searcher(const QString &localSettingsFile, const QString &globalSettingsFile)
54 : m_localSettingsFile(localSettingsFile), m_globalSettingsFile(globalSettingsFile)
55 {
56 }
57 SearchResult search(const QString &path);
58
59 QString localSettingsFile() const { return m_localSettingsFile; }
60
61 private:
62 SearchResult searchDefaultLocation(const QSet<QString> *visitedDirs);
63 SearchResult searchCurrentDirInCache(const QString &dirPath);
64 SearchResult searchDirectoryHierarchy(QSet<QString> *visitedDir, const QString &path);
65
66 const QString m_localSettingsFile;
67 const QString m_globalSettingsFile;
68 QHash<QString, QString> m_seenDirectories;
69 };
70
71 void addOption(const QString &name, const QVariant &defaultValue = QVariant());
72 SearchResult search(const QString &path, const SearchOptions &options = {});
73 bool writeDefaults() const;
74
75 QVariant value(const QString &name) const;
76 QStringList valueAsStringList(const QString &name) const;
77
78 static void resolveRelativeImportPaths(const QString &filePath, QStringList *paths);
79 QStringList valueAsAbsolutePathList(const QString &name,
80 const QString &baseForRelativePaths) const;
81 bool isSet(const QString &name) const;
82
83 bool reportConfigForFiles(const QStringList &files);
84
85protected:
86 QString m_currentSettingsPath;
87 QVariantHash m_values;
88 Searcher m_searcher;
89 QStringList m_recognizedIniSections;
90
91 SearchResult read(const QString &settingsFilePath, SearchOptions options);
92};
93
94class QQmlToolingSharedSettings : private QQmlToolingSettings
95{
96public:
97 QQmlToolingSharedSettings(const QString &toolName) : QQmlToolingSettings(toolName) { }
98
99 void addOption(const QString &name, const QVariant &defaultValue = QVariant())
100 {
101 QMutexLocker lock(&m_mutex);
102 QQmlToolingSettings::addOption(name, defaultValue);
103 }
104
105 bool writeDefaults() const
106 {
107 QMutexLocker lock(&m_mutex);
108 return QQmlToolingSettings::writeDefaults();
109 }
110
111 SearchResult search(const QString &path, const SearchOptions &options = {})
112 {
113 QMutexLocker lock(&m_mutex);
114 return QQmlToolingSettings::search(path, options);
115 }
116
117 QVariant value(const QString &name) const
118 {
119 QMutexLocker lock(&m_mutex);
120 return QQmlToolingSettings::value(name);
121 }
122
123 QStringList valueAsStringList(const QString &name) const
124 {
125 QMutexLocker lock(&m_mutex);
126 return QQmlToolingSettings::valueAsStringList(name);
127 }
128
130 const QString &baseForRelativePaths) const
131 {
132 QMutexLocker lock(&m_mutex);
133 return QQmlToolingSettings::valueAsAbsolutePathList(name, baseForRelativePaths);
134 }
135
136 bool isSet(const QString &name) const
137 {
138 QMutexLocker lock(&m_mutex);
139 return QQmlToolingSettings::isSet(name);
140 }
141
142private:
143 mutable QMutex m_mutex;
144};
145
146QT_END_NAMESPACE
147
148#endif // QQMLTOOLINGSETTINGS_P_H
QQmlToolingSharedSettings(const QString &toolName)
QVariant value(const QString &name) const
SearchResult search(const QString &path, const SearchOptions &options={})
void addOption(const QString &name, const QVariant &defaultValue=QVariant())
QStringList valueAsAbsolutePathList(const QString &name, const QString &baseForRelativePaths) const
bool isSet(const QString &name) const
QStringList valueAsStringList(const QString &name) const
static QString findIniFile(const QString &local, const QString &global)