From 265f76b9cdc579287c7276da8721df0abbb92cef Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 19 Jun 2024 17:55:01 +0200 Subject: [PATCH] QmlJsEditor: Simplify structure of QmlJS settings handling Not the intended final state, but more uniform. Change-Id: I406d53032ff76631ddd542df8e3afa232d93a7fc Reviewed-by: Christian Stenger --- .../qmljseditor/qmljseditingsettingspage.cpp | 97 +++++++++++++------ .../qmljseditor/qmljseditingsettingspage.h | 20 +++- src/plugins/qmljseditor/qmljseditor.cpp | 4 +- .../qmljseditor/qmljseditordocument.cpp | 5 +- src/plugins/qmljseditor/qmljshoverhandler.cpp | 2 +- src/plugins/qmljseditor/qmllssettings.cpp | 37 ++++--- src/plugins/qmljseditor/qmllssettings.h | 28 ++---- 7 files changed, 121 insertions(+), 72 deletions(-) diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp index 644c0d1d50e..6c9286659f9 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp @@ -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 &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 disabled; QSet disabledForNonQuickUi; diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.h b/src/plugins/qmljseditor/qmljseditingsettingspage.h index 5f6d954fbdb..f7eee42cdb6 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.h +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.h @@ -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 disabledMessagesForNonQuickUi() const; void setDisabledMessagesForNonQuickUi(const QSet &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; diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 11dc5cf9ae8..76aeb70666f 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -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); diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index cef1aefcd2b..582516da1b5 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -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; diff --git a/src/plugins/qmljseditor/qmljshoverhandler.cpp b/src/plugins/qmljseditor/qmljshoverhandler.cpp index 650592ff485..7cd66696c5c 100644 --- a/src/plugins/qmljseditor/qmljshoverhandler.cpp +++ b/src/plugins/qmljseditor/qmljshoverhandler.cpp @@ -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; } diff --git a/src/plugins/qmljseditor/qmllssettings.cpp b/src/plugins/qmljseditor/qmllssettings.cpp index 15cb8908afb..7fdcbc109e6 100644 --- a/src/plugins/qmljseditor/qmllssettings.cpp +++ b/src/plugins/qmljseditor/qmllssettings.cpp @@ -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 diff --git a/src/plugins/qmljseditor/qmllssettings.h b/src/plugins/qmljseditor/qmllssettings.h index 90d8ff6ca8f..b4cc3ac176b 100644 --- a/src/plugins/qmljseditor/qmllssettings.h +++ b/src/plugins/qmljseditor/qmllssettings.h @@ -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; };