diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp index 644c0d1d50e..433f0f8b1e0 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp @@ -35,6 +35,7 @@ const char QML_CONTEXTPANEPIN_KEY[] = "QmlJSEditor.ContextPanePinned"; const char FOLD_AUX_DATA[] = "QmlJSEditor.FoldAuxData"; const char USE_QMLLS[] = "QmlJSEditor.UseQmlls"; const char USE_LATEST_QMLLS[] = "QmlJSEditor.UseLatestQmlls"; +const char IGNORE_MINIMUM_QMLLS_VERSION[] = "QmlJSEditor.IgnoreMinimumQmllsVersion"; const char DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel"; const char GENERATE_QMLLS_INI_FILES[] = "QmlJSEditor.GenerateQmllsIniFiles"; const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode"; @@ -107,6 +108,8 @@ void QmlJsEditingSettings::fromSettings(QtcSettings *settings) 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.ignoreMinimumQmllsVersion + = settings->value(IGNORE_MINIMUM_QMLLS_VERSION, QVariant(false)).toBool(); m_qmllsSettings.disableBuiltinCodemodel = settings->value(DISABLE_BUILTIN_CODEMODEL, QVariant(false)).toBool(); m_qmllsSettings.generateQmllsIniFiles @@ -138,6 +141,7 @@ void QmlJsEditingSettings::toSettings(QtcSettings *settings) const settings->setValue(UIQML_OPEN_MODE, m_uiQmlOpenMode); settings->setValue(USE_QMLLS, m_qmllsSettings.useQmlls); settings->setValue(USE_LATEST_QMLLS, m_qmllsSettings.useLatestQmlls); + settings->setValue(IGNORE_MINIMUM_QMLLS_VERSION, m_qmllsSettings.ignoreMinimumQmllsVersion); settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel); settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.generateQmllsIniFiles); settings->setValueWithDefault(FORMAT_COMMAND, m_formatCommand, {}); @@ -399,6 +403,13 @@ public: useQmlls = new QCheckBox(Tr::tr("Enable QML Language Server")); useQmlls->setChecked(s.qmllsSettings().useQmlls); + + ignoreMinimumQmllsVersion = new QCheckBox( + Tr::tr("Allow versions below Qt %1") + .arg(QmllsSettings::mininumQmllsVersion.toString())); + ignoreMinimumQmllsVersion->setChecked(s.qmllsSettings().ignoreMinimumQmllsVersion); + ignoreMinimumQmllsVersion->setEnabled(s.qmllsSettings().useQmlls); + disableBuiltInCodemodel = new QCheckBox( Tr::tr("Use QML Language Server advanced features (renaming, find usages and co.) " "(EXPERIMENTAL!)")); @@ -407,6 +418,7 @@ public: useLatestQmlls = new QCheckBox(Tr::tr("Use QML Language Server from latest Qt version")); useLatestQmlls->setChecked(s.qmllsSettings().useLatestQmlls); useLatestQmlls->setEnabled(s.qmllsSettings().useQmlls); + generateQmllsIniFiles = new QCheckBox( Tr::tr("Generate QML Language Server .qmlls.ini configurations for new projects.")); generateQmllsIniFiles->setChecked(s.qmllsSettings().generateQmllsIniFiles); @@ -415,6 +427,7 @@ public: useLatestQmlls->setEnabled(checked != Qt::Unchecked); disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked); generateQmllsIniFiles->setEnabled(checked != Qt::Unchecked); + ignoreMinimumQmllsVersion->setEnabled(checked != Qt::Unchecked); }); useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer")); @@ -467,7 +480,7 @@ public: }, Group{ title(Tr::tr("QML Language Server")), - Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls, generateQmllsIniFiles}, + Column{useQmlls, ignoreMinimumQmllsVersion, disableBuiltInCodemodel, useLatestQmlls, generateQmllsIniFiles}, }, Group { title(Tr::tr("Static Analyzer")), @@ -513,6 +526,7 @@ public: s.qmllsSettings().useQmlls = useQmlls->isChecked(); s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked(); s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked(); + s.qmllsSettings().ignoreMinimumQmllsVersion = ignoreMinimumQmllsVersion->isChecked(); s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked(); s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked()); QSet disabled; @@ -571,6 +585,7 @@ private: QCheckBox *foldAuxData; QCheckBox *useQmlls; QCheckBox *useLatestQmlls; + QCheckBox *ignoreMinimumQmllsVersion; QCheckBox *disableBuiltInCodemodel; QCheckBox *generateQmllsIniFiles; QComboBox *uiQmlOpenComboBox; diff --git a/src/plugins/qmljseditor/qmljseditordocument.cpp b/src/plugins/qmljseditor/qmljseditordocument.cpp index cef1aefcd2b..3dfb9b8f137 100644 --- a/src/plugins/qmljseditor/qmljseditordocument.cpp +++ b/src/plugins/qmljseditor/qmljseditordocument.cpp @@ -745,6 +745,11 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file, if (settings.useLatestQmlls) return settingsManager->latestQmlls(); QmlJS::ModelManagerInterface::ProjectInfo pInfo = modelManager->projectInfoForPath(file); + + if (!settings.ignoreMinimumQmllsVersion + && QVersionNumber::fromString(pInfo.qtVersionString) < settings.mininumQmllsVersion) { + return {}; + } return pInfo.qmllsPath; } diff --git a/src/plugins/qmljseditor/qmllssettings.cpp b/src/plugins/qmljseditor/qmllssettings.cpp index 15cb8908afb..8ca9936957f 100644 --- a/src/plugins/qmljseditor/qmllssettings.cpp +++ b/src/plugins/qmljseditor/qmllssettings.cpp @@ -33,9 +33,12 @@ static FilePath evaluateLatestQmlls() QVersionNumber latestVersion; FilePath latestQmakeFilePath; int latestUniqueId = std::numeric_limits::min(); + const QmllsSettings qmllsSettings = QmllsSettingsManager::instance()->lastSettings(); for (QtVersion *v : versions) { // check if we find qmlls QVersionNumber vNow = v->qtVersion(); + if (!qmllsSettings.ignoreMinimumQmllsVersion && vNow < qmllsSettings.mininumQmllsVersion) + continue; FilePath qmllsNow = QmlJS::ModelManagerInterface::qmllsForBinPath(v->hostBinPath(), vNow); if (!qmllsNow.isExecutableFile()) continue; diff --git a/src/plugins/qmljseditor/qmllssettings.h b/src/plugins/qmljseditor/qmllssettings.h index 90d8ff6ca8f..ad11a541c52 100644 --- a/src/plugins/qmljseditor/qmllssettings.h +++ b/src/plugins/qmljseditor/qmllssettings.h @@ -5,6 +5,7 @@ #include "qmljseditor_global.h" +#include #include #include #include @@ -13,8 +14,10 @@ namespace QmlJSEditor { struct QmllsSettings { + static const inline QVersionNumber mininumQmllsVersion = QVersionNumber(6,8); bool useQmlls = true; bool useLatestQmlls = false; + bool ignoreMinimumQmllsVersion = false; bool disableBuiltinCodemodel = false; bool generateQmllsIniFiles = false; @@ -22,7 +25,8 @@ struct QmllsSettings { return s1.useQmlls == s2.useQmlls && s1.useLatestQmlls == s2.useLatestQmlls && s1.disableBuiltinCodemodel == s2.disableBuiltinCodemodel - && s1.generateQmllsIniFiles == s2.generateQmllsIniFiles; + && s1.generateQmllsIniFiles == s2.generateQmllsIniFiles + && s1.ignoreMinimumQmllsVersion == s2.ignoreMinimumQmllsVersion; } friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); } };