forked from qt-creator/qt-creator
qmlls: ignore versions from Qt 6.7 or below
Do not select qmlls executables from versions below 6.8 by default, as those have less features than QtC's builtin codemodel. Add an option to re-enable using qmlls versions from Qt 6.7 or below, which is off by default. Fixes: QTCREATORBUG-31088 Change-Id: I56bfd39bc980996a92232cbcb424252d755cdfc0 Reviewed-by: hjk <hjk@qt.io> Reviewed-by: David Schulz <david.schulz@qt.io> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -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<int> disabled;
|
||||
@@ -571,6 +585,7 @@ private:
|
||||
QCheckBox *foldAuxData;
|
||||
QCheckBox *useQmlls;
|
||||
QCheckBox *useLatestQmlls;
|
||||
QCheckBox *ignoreMinimumQmllsVersion;
|
||||
QCheckBox *disableBuiltInCodemodel;
|
||||
QCheckBox *generateQmllsIniFiles;
|
||||
QComboBox *uiQmlOpenComboBox;
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -33,9 +33,12 @@ static FilePath evaluateLatestQmlls()
|
||||
QVersionNumber latestVersion;
|
||||
FilePath latestQmakeFilePath;
|
||||
int latestUniqueId = std::numeric_limits<int>::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;
|
||||
|
@@ -5,6 +5,7 @@
|
||||
|
||||
#include "qmljseditor_global.h"
|
||||
|
||||
#include <QtCore/qversionnumber.h>
|
||||
#include <utils/filepath.h>
|
||||
#include <QMutex>
|
||||
#include <QObject>
|
||||
@@ -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); }
|
||||
};
|
||||
|
Reference in New Issue
Block a user