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

View File

@@ -50,9 +50,6 @@ public:
bool useCustomFormatCommand() const; bool useCustomFormatCommand() const;
void setUseCustomFormatCommand(bool customCommand); void setUseCustomFormatCommand(bool customCommand);
QmllsSettings &qmllsSettings();
const QmllsSettings &qmllsSettings() const;
const QString uiQmlOpenMode() const; const QString uiQmlOpenMode() const;
void setUiQmlOpenMode(const QString &mode); void setUiQmlOpenMode(const QString &mode);
@@ -65,6 +62,18 @@ public:
QSet<int> disabledMessagesForNonQuickUi() const; QSet<int> disabledMessagesForNonQuickUi() const;
void setDisabledMessagesForNonQuickUi(const QSet<int> &disabled); 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) friend bool operator==(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
{ return s1.equals(s2); } { return s1.equals(s2); }
friend bool operator!=(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2) friend bool operator!=(const QmlJsEditingSettings &s1, const QmlJsEditingSettings &s2)
@@ -78,7 +87,10 @@ private:
bool m_foldAuxData = true; bool m_foldAuxData = true;
bool m_useCustomFormatCommand = false; bool m_useCustomFormatCommand = false;
bool m_useCustomAnalyzer = 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_uiQmlOpenMode;
QString m_formatCommand; QString m_formatCommand;
QString m_formatCommandOptions; QString m_formatCommandOptions;

View File

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

View File

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

View File

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

View File

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

View File

@@ -11,30 +11,19 @@
namespace QmlJSEditor { 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 class QMLJSEDITOR_EXPORT QmllsSettingsManager : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
static QmllsSettingsManager *instance(); static QmllsSettingsManager *instance();
QmllsSettings lastSettings();
Utils::FilePath latestQmlls(); Utils::FilePath latestQmlls();
void setupAutoupdate(); void setupAutoupdate();
bool useQmlls() const;
bool useLatestQmlls() const;
public slots: public slots:
void checkForChanges(); void checkForChanges();
signals: signals:
@@ -42,7 +31,10 @@ signals:
private: private:
QMutex m_mutex; 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; Utils::FilePath m_latestQmlls;
}; };