QmlJsEditor: Simplify structure of QmlJS settings handling

Not the intended final state, but more uniform.

Change-Id: I406d53032ff76631ddd542df8e3afa232d93a7fc
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2024-06-19 17:55:01 +02:00
parent 391e7ae34a
commit 265f76b9cd
7 changed files with 121 additions and 72 deletions

View File

@@ -105,11 +105,11 @@ void QmlJsEditingSettings::fromSettings(QtcSettings *settings)
= settings->value(AUTO_FORMAT_ONLY_CURRENT_PROJECT, QVariant(false)).toBool();
m_foldAuxData = settings->value(FOLD_AUX_DATA, QVariant(true)).toBool();
m_uiQmlOpenMode = settings->value(UIQML_OPEN_MODE, "").toString();
m_qmllsSettings.useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
m_qmllsSettings.useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).toBool();
m_qmllsSettings.disableBuiltinCodemodel
m_useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
m_useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).toBool();
m_disableBuiltinCodemodel
= settings->value(DISABLE_BUILTIN_CODEMODEL, QVariant(false)).toBool();
m_qmllsSettings.generateQmllsIniFiles
m_generateQmllsIniFiles
= settings->value(GENERATE_QMLLS_INI_FILES, QVariant(false)).toBool();
m_formatCommand = settings->value(FORMAT_COMMAND, {}).toString();
m_formatCommandOptions = settings->value(FORMAT_COMMAND_OPTIONS, {}).toString();
@@ -136,10 +136,10 @@ void QmlJsEditingSettings::toSettings(QtcSettings *settings) const
settings->setValue(AUTO_FORMAT_ONLY_CURRENT_PROJECT, m_autoFormatOnlyCurrentProject);
settings->setValue(FOLD_AUX_DATA, m_foldAuxData);
settings->setValue(UIQML_OPEN_MODE, m_uiQmlOpenMode);
settings->setValue(USE_QMLLS, m_qmllsSettings.useQmlls);
settings->setValue(USE_LATEST_QMLLS, m_qmllsSettings.useLatestQmlls);
settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel);
settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.generateQmllsIniFiles);
settings->setValue(USE_QMLLS, m_useQmlls);
settings->setValue(USE_LATEST_QMLLS, m_useLatestQmlls);
settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_disableBuiltinCodemodel);
settings->setValue(GENERATE_QMLLS_INI_FILES, m_generateQmllsIniFiles);
settings->setValueWithDefault(FORMAT_COMMAND, m_formatCommand, {});
settings->setValueWithDefault(FORMAT_COMMAND_OPTIONS, m_formatCommandOptions, {});
settings->setValueWithDefault(CUSTOM_COMMAND, m_useCustomFormatCommand, false);
@@ -160,8 +160,13 @@ bool QmlJsEditingSettings::equals(const QmlJsEditingSettings &other) const
&& m_pinContextPane == other.m_pinContextPane
&& m_autoFormatOnSave == other.m_autoFormatOnSave
&& m_autoFormatOnlyCurrentProject == other.m_autoFormatOnlyCurrentProject
&& m_foldAuxData == other.m_foldAuxData && m_qmllsSettings == other.m_qmllsSettings
&& m_uiQmlOpenMode == other.m_uiQmlOpenMode && m_formatCommand == other.m_formatCommand
&& m_foldAuxData == other.m_foldAuxData
&& m_useQmlls == other.m_useQmlls
&& m_useLatestQmlls == other.m_useLatestQmlls
&& m_disableBuiltinCodemodel == other.m_disableBuiltinCodemodel
&& m_generateQmllsIniFiles == other.m_generateQmllsIniFiles
&& m_uiQmlOpenMode == other.m_uiQmlOpenMode
&& m_formatCommand == other.m_formatCommand
&& m_formatCommandOptions == other.m_formatCommandOptions
&& m_useCustomFormatCommand == other.m_useCustomFormatCommand
&& m_useCustomAnalyzer == other.m_useCustomAnalyzer
@@ -254,16 +259,6 @@ void QmlJsEditingSettings::setUseCustomFormatCommand(bool customCommand)
m_useCustomFormatCommand = customCommand;
}
QmllsSettings &QmlJsEditingSettings::qmllsSettings()
{
return m_qmllsSettings;
}
const QmllsSettings &QmlJsEditingSettings::qmllsSettings() const
{
return m_qmllsSettings;
}
const QString QmlJsEditingSettings::uiQmlOpenMode() const
{
return m_uiQmlOpenMode;
@@ -304,6 +299,46 @@ void QmlJsEditingSettings::setDisabledMessagesForNonQuickUi(const QSet<int> &dis
m_disabledMessagesForNonQuickUi = disabled;
}
bool QmlJsEditingSettings::generateQmllsIniFiles() const
{
return m_generateQmllsIniFiles;
}
void QmlJsEditingSettings::setGenerateQmllsIniFiles(bool newGenerateQmllsIniFiles)
{
m_generateQmllsIniFiles = newGenerateQmllsIniFiles;
}
bool QmlJsEditingSettings::disableBuiltinCodemodel() const
{
return m_disableBuiltinCodemodel;
}
void QmlJsEditingSettings::setDisableBuiltinCodemodel(bool newDisableBuiltinCodemodel)
{
m_disableBuiltinCodemodel = newDisableBuiltinCodemodel;
}
bool QmlJsEditingSettings::useLatestQmlls() const
{
return m_useLatestQmlls;
}
void QmlJsEditingSettings::setUseLatestQmlls(bool newUseLatestQmlls)
{
m_useLatestQmlls = newUseLatestQmlls;
}
bool QmlJsEditingSettings::useQmlls() const
{
return m_useQmlls;
}
void QmlJsEditingSettings::setUseQmlls(bool newUseQmlls)
{
m_useQmlls = newUseQmlls;
}
class AnalyzerMessageItem final : public Utils::TreeItem
{
public:
@@ -398,19 +433,19 @@ public:
uiQmlOpenComboBox->setSizeAdjustPolicy(QComboBox::QComboBox::AdjustToContents);
useQmlls = new QCheckBox(Tr::tr("Enable QML Language Server"));
useQmlls->setChecked(s.qmllsSettings().useQmlls);
useQmlls->setChecked(s.useQmlls());
disableBuiltInCodemodel = new QCheckBox(
Tr::tr("Use QML Language Server advanced features (renaming, find usages and co.) "
"(EXPERIMENTAL!)"));
disableBuiltInCodemodel->setChecked(s.qmllsSettings().disableBuiltinCodemodel);
disableBuiltInCodemodel->setEnabled(s.qmllsSettings().useQmlls);
disableBuiltInCodemodel->setChecked(s.disableBuiltinCodemodel());
disableBuiltInCodemodel->setEnabled(s.useQmlls());
useLatestQmlls = new QCheckBox(Tr::tr("Use QML Language Server from latest Qt version"));
useLatestQmlls->setChecked(s.qmllsSettings().useLatestQmlls);
useLatestQmlls->setEnabled(s.qmllsSettings().useQmlls);
useLatestQmlls->setChecked(s.useLatestQmlls());
useLatestQmlls->setEnabled(s.useQmlls());
generateQmllsIniFiles = new QCheckBox(
Tr::tr("Generate QML Language Server .qmlls.ini configurations for new projects."));
generateQmllsIniFiles->setChecked(s.qmllsSettings().generateQmllsIniFiles);
generateQmllsIniFiles->setEnabled(s.qmllsSettings().useQmlls);
generateQmllsIniFiles->setChecked(s.generateQmllsIniFiles());
generateQmllsIniFiles->setEnabled(s.useQmlls());
QObject::connect(useQmlls, &QCheckBox::stateChanged, this, [this](int checked) {
useLatestQmlls->setEnabled(checked != Qt::Unchecked);
disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked);
@@ -510,10 +545,10 @@ public:
s.setFormatCommandOptions(formatCommandOptions->text());
s.setFoldAuxData(foldAuxData->isChecked());
s.setUiQmlOpenMode(uiQmlOpenComboBox->currentData().toString());
s.qmllsSettings().useQmlls = useQmlls->isChecked();
s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked();
s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked();
s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked();
s.setUseQmlls(useQmlls->isChecked());
s.setDisableBuiltinCodemodel(disableBuiltInCodemodel->isChecked());
s.setUseLatestQmlls(useLatestQmlls->isChecked());
s.setGenerateQmllsIniFiles(generateQmllsIniFiles->isChecked());
s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked());
QSet<int> disabled;
QSet<int> disabledForNonQuickUi;

View File

@@ -50,9 +50,6 @@ public:
bool useCustomFormatCommand() const;
void setUseCustomFormatCommand(bool customCommand);
QmllsSettings &qmllsSettings();
const QmllsSettings &qmllsSettings() const;
const QString uiQmlOpenMode() const;
void setUiQmlOpenMode(const QString &mode);
@@ -65,6 +62,18 @@ public:
QSet<int> disabledMessagesForNonQuickUi() const;
void setDisabledMessagesForNonQuickUi(const QSet<int> &disabled);
bool useQmlls() const;
void setUseQmlls(bool newUseQmlls);
bool useLatestQmlls() const;
void setUseLatestQmlls(bool newUseLatestQmlls);
bool disableBuiltinCodemodel() const;
void setDisableBuiltinCodemodel(bool newDisableBuiltinCodemodel);
bool generateQmllsIniFiles() const;
void setGenerateQmllsIniFiles(bool newGenerateQmllsIniFiles);
friend bool operator==(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
{ return s1.equals(s2); }
friend bool operator!=(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
@@ -78,7 +87,10 @@ private:
bool m_foldAuxData = true;
bool m_useCustomFormatCommand = false;
bool m_useCustomAnalyzer = false;
QmllsSettings m_qmllsSettings;
bool m_useQmlls = true;
bool m_useLatestQmlls = false;
bool m_disableBuiltinCodemodel = false;
bool m_generateQmllsIniFiles = false;
QString m_uiQmlOpenMode;
QString m_formatCommand;
QString m_formatCommandOptions;

View File

@@ -97,8 +97,8 @@ namespace QmlJSEditor {
static LanguageClient::Client *getQmllsClient(const Utils::FilePath &fileName)
{
// the value in disableBuiltinCodemodel is only valid when useQmlls is enabled
if (QmlJsEditingSettings::get().qmllsSettings().useQmlls
&& !QmlJsEditingSettings::get().qmllsSettings().disableBuiltinCodemodel)
if (QmlJsEditingSettings::get().useQmlls()
&& !QmlJsEditingSettings::get().disableBuiltinCodemodel())
return nullptr;
auto client = LanguageClient::LanguageClientManager::clientForFilePath(fileName);

View File

@@ -738,11 +738,10 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
QmlJS::ModelManagerInterface *modelManager)
{
QmllsSettingsManager *settingsManager = QmllsSettingsManager::instance();
QmllsSettings settings = settingsManager->lastSettings();
bool enabled = settings.useQmlls;
bool enabled = settingsManager->useQmlls();
if (!enabled)
return {};
if (settings.useLatestQmlls)
if (settingsManager->useLatestQmlls())
return settingsManager->latestQmlls();
QmlJS::ModelManagerInterface::ProjectInfo pInfo = modelManager->projectInfoForPath(file);
return pInfo.qmllsPath;

View File

@@ -375,7 +375,7 @@ void QmlJSHoverHandler::reset()
void QmlJSHoverHandler::operateTooltip(TextEditorWidget *editorWidget, const QPoint &point)
{
// disable hoverhandling in case qmlls is enabled
if (QmlJsEditingSettings::get().qmllsSettings().useQmlls) {
if (QmlJsEditingSettings::get().useQmlls()) {
BaseHoverHandler::operateTooltip(editorWidget, point);
return;
}

View File

@@ -63,12 +63,6 @@ QmllsSettingsManager *QmllsSettingsManager::instance()
return manager;
}
QmllsSettings QmllsSettingsManager::lastSettings()
{
QMutexLocker l(&m_mutex);
return m_lastSettings;
}
FilePath QmllsSettingsManager::latestQmlls()
{
QMutexLocker l(&m_mutex);
@@ -92,19 +86,36 @@ void QmllsSettingsManager::setupAutoupdate()
void QmllsSettingsManager::checkForChanges()
{
QmllsSettings newSettings = QmlJsEditingSettings::get().qmllsSettings();
FilePath newLatest = newSettings.useLatestQmlls && newSettings.useQmlls ? evaluateLatestQmlls()
: m_latestQmlls;
if (m_lastSettings == newSettings && newLatest == m_latestQmlls)
const QmlJsEditingSettings &newSettings = QmlJsEditingSettings::get();
FilePath newLatest = newSettings.useLatestQmlls() && newSettings.useQmlls()
? evaluateLatestQmlls() : m_latestQmlls;
if (m_useQmlls == newSettings.useQmlls()
&& m_useLatestQmlls == newSettings.useLatestQmlls()
&& m_disableBuiltinCodemodel == newSettings.disableBuiltinCodemodel()
&& m_generateQmllsIniFiles == newSettings.generateQmllsIniFiles()
&& newLatest == m_latestQmlls)
return;
qCDebug(qmllsLog) << "qmlls settings changed:" << newSettings.useQmlls
<< newSettings.useLatestQmlls << newLatest;
qCDebug(qmllsLog) << "qmlls settings changed:" << newSettings.useQmlls()
<< newSettings.useLatestQmlls() << newLatest;
{
QMutexLocker l(&m_mutex);
m_latestQmlls = newLatest;
m_lastSettings = newSettings;
m_useQmlls = newSettings.useQmlls();
m_useLatestQmlls = newSettings.useLatestQmlls();
m_disableBuiltinCodemodel = newSettings.disableBuiltinCodemodel();
m_generateQmllsIniFiles = newSettings.generateQmllsIniFiles();
}
emit settingsChanged();
}
bool QmllsSettingsManager::useLatestQmlls() const
{
return m_useLatestQmlls;
}
bool QmllsSettingsManager::useQmlls() const
{
return m_useQmlls;
}
} // namespace QmlJSEditor

View File

@@ -11,30 +11,19 @@
namespace QmlJSEditor {
struct QmllsSettings
{
bool useQmlls = true;
bool useLatestQmlls = false;
bool disableBuiltinCodemodel = false;
bool generateQmllsIniFiles = false;
friend bool operator==(const QmllsSettings &s1, const QmllsSettings &s2)
{
return s1.useQmlls == s2.useQmlls && s1.useLatestQmlls == s2.useLatestQmlls
&& s1.disableBuiltinCodemodel == s2.disableBuiltinCodemodel
&& s1.generateQmllsIniFiles == s2.generateQmllsIniFiles;
}
friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); }
};
class QMLJSEDITOR_EXPORT QmllsSettingsManager : public QObject
{
Q_OBJECT
public:
static QmllsSettingsManager *instance();
QmllsSettings lastSettings();
Utils::FilePath latestQmlls();
void setupAutoupdate();
bool useQmlls() const;
bool useLatestQmlls() const;
public slots:
void checkForChanges();
signals:
@@ -42,7 +31,10 @@ signals:
private:
QMutex m_mutex;
QmllsSettings m_lastSettings;
bool m_useQmlls = true;
bool m_useLatestQmlls = false;
bool m_disableBuiltinCodemodel = false;
bool m_generateQmllsIniFiles = false;
Utils::FilePath m_latestQmlls;
};