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 FOLD_AUX_DATA[] = "QmlJSEditor.FoldAuxData";
|
||||||
const char USE_QMLLS[] = "QmlJSEditor.UseQmlls";
|
const char USE_QMLLS[] = "QmlJSEditor.UseQmlls";
|
||||||
const char USE_LATEST_QMLLS[] = "QmlJSEditor.UseLatestQmlls";
|
const char USE_LATEST_QMLLS[] = "QmlJSEditor.UseLatestQmlls";
|
||||||
|
const char IGNORE_MINIMUM_QMLLS_VERSION[] = "QmlJSEditor.IgnoreMinimumQmllsVersion";
|
||||||
const char DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel";
|
const char DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel";
|
||||||
const char GENERATE_QMLLS_INI_FILES[] = "QmlJSEditor.GenerateQmllsIniFiles";
|
const char GENERATE_QMLLS_INI_FILES[] = "QmlJSEditor.GenerateQmllsIniFiles";
|
||||||
const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode";
|
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_uiQmlOpenMode = settings->value(UIQML_OPEN_MODE, "").toString();
|
||||||
m_qmllsSettings.useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
|
m_qmllsSettings.useQmlls = settings->value(USE_QMLLS, QVariant(true)).toBool();
|
||||||
m_qmllsSettings.useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).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
|
m_qmllsSettings.disableBuiltinCodemodel
|
||||||
= settings->value(DISABLE_BUILTIN_CODEMODEL, QVariant(false)).toBool();
|
= settings->value(DISABLE_BUILTIN_CODEMODEL, QVariant(false)).toBool();
|
||||||
m_qmllsSettings.generateQmllsIniFiles
|
m_qmllsSettings.generateQmllsIniFiles
|
||||||
@@ -138,6 +141,7 @@ void QmlJsEditingSettings::toSettings(QtcSettings *settings) const
|
|||||||
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_qmllsSettings.useQmlls);
|
||||||
settings->setValue(USE_LATEST_QMLLS, m_qmllsSettings.useLatestQmlls);
|
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(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel);
|
||||||
settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.generateQmllsIniFiles);
|
settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.generateQmllsIniFiles);
|
||||||
settings->setValueWithDefault(FORMAT_COMMAND, m_formatCommand, {});
|
settings->setValueWithDefault(FORMAT_COMMAND, m_formatCommand, {});
|
||||||
@@ -399,6 +403,13 @@ public:
|
|||||||
|
|
||||||
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.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(
|
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!)"));
|
||||||
@@ -407,6 +418,7 @@ public:
|
|||||||
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.qmllsSettings().useLatestQmlls);
|
||||||
useLatestQmlls->setEnabled(s.qmllsSettings().useQmlls);
|
useLatestQmlls->setEnabled(s.qmllsSettings().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.qmllsSettings().generateQmllsIniFiles);
|
||||||
@@ -415,6 +427,7 @@ public:
|
|||||||
useLatestQmlls->setEnabled(checked != Qt::Unchecked);
|
useLatestQmlls->setEnabled(checked != Qt::Unchecked);
|
||||||
disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked);
|
disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked);
|
||||||
generateQmllsIniFiles->setEnabled(checked != Qt::Unchecked);
|
generateQmllsIniFiles->setEnabled(checked != Qt::Unchecked);
|
||||||
|
ignoreMinimumQmllsVersion->setEnabled(checked != Qt::Unchecked);
|
||||||
});
|
});
|
||||||
|
|
||||||
useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer"));
|
useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer"));
|
||||||
@@ -467,7 +480,7 @@ public:
|
|||||||
},
|
},
|
||||||
Group{
|
Group{
|
||||||
title(Tr::tr("QML Language Server")),
|
title(Tr::tr("QML Language Server")),
|
||||||
Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls, generateQmllsIniFiles},
|
Column{useQmlls, ignoreMinimumQmllsVersion, disableBuiltInCodemodel, useLatestQmlls, generateQmllsIniFiles},
|
||||||
},
|
},
|
||||||
Group {
|
Group {
|
||||||
title(Tr::tr("Static Analyzer")),
|
title(Tr::tr("Static Analyzer")),
|
||||||
@@ -513,6 +526,7 @@ public:
|
|||||||
s.qmllsSettings().useQmlls = useQmlls->isChecked();
|
s.qmllsSettings().useQmlls = useQmlls->isChecked();
|
||||||
s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked();
|
s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked();
|
||||||
s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked();
|
s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked();
|
||||||
|
s.qmllsSettings().ignoreMinimumQmllsVersion = ignoreMinimumQmllsVersion->isChecked();
|
||||||
s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked();
|
s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked();
|
||||||
s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked());
|
s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked());
|
||||||
QSet<int> disabled;
|
QSet<int> disabled;
|
||||||
@@ -571,6 +585,7 @@ private:
|
|||||||
QCheckBox *foldAuxData;
|
QCheckBox *foldAuxData;
|
||||||
QCheckBox *useQmlls;
|
QCheckBox *useQmlls;
|
||||||
QCheckBox *useLatestQmlls;
|
QCheckBox *useLatestQmlls;
|
||||||
|
QCheckBox *ignoreMinimumQmllsVersion;
|
||||||
QCheckBox *disableBuiltInCodemodel;
|
QCheckBox *disableBuiltInCodemodel;
|
||||||
QCheckBox *generateQmllsIniFiles;
|
QCheckBox *generateQmllsIniFiles;
|
||||||
QComboBox *uiQmlOpenComboBox;
|
QComboBox *uiQmlOpenComboBox;
|
||||||
|
@@ -745,6 +745,11 @@ static Utils::FilePath qmllsForFile(const Utils::FilePath &file,
|
|||||||
if (settings.useLatestQmlls)
|
if (settings.useLatestQmlls)
|
||||||
return settingsManager->latestQmlls();
|
return settingsManager->latestQmlls();
|
||||||
QmlJS::ModelManagerInterface::ProjectInfo pInfo = modelManager->projectInfoForPath(file);
|
QmlJS::ModelManagerInterface::ProjectInfo pInfo = modelManager->projectInfoForPath(file);
|
||||||
|
|
||||||
|
if (!settings.ignoreMinimumQmllsVersion
|
||||||
|
&& QVersionNumber::fromString(pInfo.qtVersionString) < settings.mininumQmllsVersion) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
return pInfo.qmllsPath;
|
return pInfo.qmllsPath;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -33,9 +33,12 @@ static FilePath evaluateLatestQmlls()
|
|||||||
QVersionNumber latestVersion;
|
QVersionNumber latestVersion;
|
||||||
FilePath latestQmakeFilePath;
|
FilePath latestQmakeFilePath;
|
||||||
int latestUniqueId = std::numeric_limits<int>::min();
|
int latestUniqueId = std::numeric_limits<int>::min();
|
||||||
|
const QmllsSettings qmllsSettings = QmllsSettingsManager::instance()->lastSettings();
|
||||||
for (QtVersion *v : versions) {
|
for (QtVersion *v : versions) {
|
||||||
// check if we find qmlls
|
// check if we find qmlls
|
||||||
QVersionNumber vNow = v->qtVersion();
|
QVersionNumber vNow = v->qtVersion();
|
||||||
|
if (!qmllsSettings.ignoreMinimumQmllsVersion && vNow < qmllsSettings.mininumQmllsVersion)
|
||||||
|
continue;
|
||||||
FilePath qmllsNow = QmlJS::ModelManagerInterface::qmllsForBinPath(v->hostBinPath(), vNow);
|
FilePath qmllsNow = QmlJS::ModelManagerInterface::qmllsForBinPath(v->hostBinPath(), vNow);
|
||||||
if (!qmllsNow.isExecutableFile())
|
if (!qmllsNow.isExecutableFile())
|
||||||
continue;
|
continue;
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "qmljseditor_global.h"
|
#include "qmljseditor_global.h"
|
||||||
|
|
||||||
|
#include <QtCore/qversionnumber.h>
|
||||||
#include <utils/filepath.h>
|
#include <utils/filepath.h>
|
||||||
#include <QMutex>
|
#include <QMutex>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
@@ -13,8 +14,10 @@ namespace QmlJSEditor {
|
|||||||
|
|
||||||
struct QmllsSettings
|
struct QmllsSettings
|
||||||
{
|
{
|
||||||
|
static const inline QVersionNumber mininumQmllsVersion = QVersionNumber(6,8);
|
||||||
bool useQmlls = true;
|
bool useQmlls = true;
|
||||||
bool useLatestQmlls = false;
|
bool useLatestQmlls = false;
|
||||||
|
bool ignoreMinimumQmllsVersion = false;
|
||||||
bool disableBuiltinCodemodel = false;
|
bool disableBuiltinCodemodel = false;
|
||||||
bool generateQmllsIniFiles = false;
|
bool generateQmllsIniFiles = false;
|
||||||
|
|
||||||
@@ -22,7 +25,8 @@ struct QmllsSettings
|
|||||||
{
|
{
|
||||||
return s1.useQmlls == s2.useQmlls && s1.useLatestQmlls == s2.useLatestQmlls
|
return s1.useQmlls == s2.useQmlls && s1.useLatestQmlls == s2.useLatestQmlls
|
||||||
&& s1.disableBuiltinCodemodel == s2.disableBuiltinCodemodel
|
&& 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); }
|
friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); }
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user