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 void setValue(const QString &name, QVariant value);
76 QVariant value(const QString &name) const;
77 QStringList valueAsStringList(const QString &name) const;
78
79 static void resolveRelativeImportPaths(const QString &filePath, QStringList *paths);
80 QStringList valueAsAbsolutePathList(const QString &name,
81 const QString &baseForRelativePaths) const;
82 bool isSet(const QString &name) const;
83
84 bool reportConfigForFiles(const QStringList &files);
85
86protected:
87 QString m_currentSettingsPath;
88 QVariantHash m_values;
89 Searcher m_searcher;
90 QStringList m_recognizedIniSections;
91
92 SearchResult read(const QString &settingsFilePath, SearchOptions options);
93};
94
95class QQmlToolingSharedSettings : private QQmlToolingSettings
96{
97public:
98 QQmlToolingSharedSettings(const QString &toolName) : QQmlToolingSettings(toolName) { }
99
100 void addOption(const QString &name, const QVariant &defaultValue = QVariant())
101 {
102 QMutexLocker lock(&m_mutex);
103 QQmlToolingSettings::addOption(name, defaultValue);
104 }
105
106 bool writeDefaults() const
107 {
108 QMutexLocker lock(&m_mutex);
109 return QQmlToolingSettings::writeDefaults();
110 }
111
112 SearchResult search(const QString &path, const SearchOptions &options = {})
113 {
114 QMutexLocker lock(&m_mutex);
115 return QQmlToolingSettings::search(path, options);
116 }
117
118 QVariant value(const QString &name) const
119 {
120 QMutexLocker lock(&m_mutex);
121 return QQmlToolingSettings::value(name);
122 }
123
124 QStringList valueAsStringList(const QString &name) const
125 {
126 QMutexLocker lock(&m_mutex);
127 return QQmlToolingSettings::valueAsStringList(name);
128 }
129
131 const QString &baseForRelativePaths) const
132 {
133 QMutexLocker lock(&m_mutex);
134 return QQmlToolingSettings::valueAsAbsolutePathList(name, baseForRelativePaths);
135 }
136
137 bool isSet(const QString &name) const
138 {
139 QMutexLocker lock(&m_mutex);
140 return QQmlToolingSettings::isSet(name);
141 }
142
143private:
144 mutable QMutex m_mutex;
145};
146
147QT_END_NAMESPACE
148
149#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)