qmlls: add checkbox for generating qmlls ini files

Add a checkbox to the qmljseditingsettingspage that generates qmlls
ini files by default for new projects.

If this checkbox is checked, then initial CMake configurations (when
enabling a kit for a project) and reconfigurations (when pressing the
"Re-configure with Initial parameters"-button) will set
QT_QML_GENERATE_QMLLS_INI to ON if QT_QML_GENERATE_QMLLS_INI was not
set yet.

Fixes: QTCREATORBUG-30394
Change-Id: I58f89558d25ef107e501bd67702f26554bd6aeaa
Reviewed-by: hjk <hjk@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
This commit is contained in:
Sami Shalayel
2024-03-14 16:36:38 +01:00
parent 403f5daf31
commit 1e3750c5be
3 changed files with 33 additions and 2 deletions

View File

@@ -94,6 +94,7 @@ const char CMAKE_BUILD_TYPE[] = "CMake.Build.Type";
const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "CMake.Configure.ClearSystemEnvironment"; const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "CMake.Configure.ClearSystemEnvironment";
const char USER_ENVIRONMENT_CHANGES_KEY[] = "CMake.Configure.UserEnvironmentChanges"; const char USER_ENVIRONMENT_CHANGES_KEY[] = "CMake.Configure.UserEnvironmentChanges";
const char BASE_ENVIRONMENT_KEY[] = "CMake.Configure.BaseEnvironment"; const char BASE_ENVIRONMENT_KEY[] = "CMake.Configure.BaseEnvironment";
const char GENERATE_QMLLS_INI_SETTING[] = "J.QtQuick/QmlJSEditor.GenerateQmllsIniFiles";
namespace Internal { namespace Internal {
@@ -606,6 +607,18 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments()
{ {
CMakeConfig initialList = m_buildConfig->initialCMakeArguments.cmakeConfiguration(); CMakeConfig initialList = m_buildConfig->initialCMakeArguments.cmakeConfiguration();
// set QT_QML_GENERATE_QMLLS_INI if it is enabled via the settings checkbox and if its not part
// of the initial CMake arguments yet
if (Core::ICore::settings()->value(GENERATE_QMLLS_INI_SETTING).toBool()) {
if (std::none_of(
initialList.constBegin(), initialList.constEnd(), [](const CMakeConfigItem &item) {
return item.key == "QT_QML_GENERATE_QMLLS_INI";
})) {
initialList.append(
CMakeConfigItem("QT_QML_GENERATE_QMLLS_INI", CMakeConfigItem::BOOL, "ON"));
}
}
for (const CMakeConfigItem &ci : m_buildConfig->cmakeBuildSystem()->configurationChanges()) { for (const CMakeConfigItem &ci : m_buildConfig->cmakeBuildSystem()->configurationChanges()) {
if (!ci.isInitial) if (!ci.isInitial)
continue; continue;
@@ -1544,6 +1557,11 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id)
if (qt && qt->isQmlDebuggingSupported()) if (qt && qt->isQmlDebuggingSupported())
cmd.addArg("-DCMAKE_CXX_FLAGS_INIT:STRING=%{" + QLatin1String(QT_QML_DEBUG_FLAG) + "}"); cmd.addArg("-DCMAKE_CXX_FLAGS_INIT:STRING=%{" + QLatin1String(QT_QML_DEBUG_FLAG) + "}");
// QT_QML_GENERATE_QMLLS_INI, if enabled via the settings checkbox:
if (Core::ICore::settings()->value(GENERATE_QMLLS_INI_SETTING).toBool()) {
cmd.addArg("-DQT_QML_GENERATE_QMLLS_INI:BOOL=ON");
}
CMakeProject *cmakeProject = static_cast<CMakeProject *>(target->project()); CMakeProject *cmakeProject = static_cast<CMakeProject *>(target->project());
configureEnv.setUserEnvironmentChanges( configureEnv.setUserEnvironmentChanges(
getEnvironmentItemsFromCMakeConfigurePreset(cmakeProject, k)); getEnvironmentItemsFromCMakeConfigurePreset(cmakeProject, k));

View File

@@ -35,6 +35,7 @@ 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 DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel"; const char DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel";
const char GENERATE_QMLLS_INI_FILES[] = "QmlJSEditor.GenerateQmllsIniFiles";
const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode"; const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode";
const char FORMAT_COMMAND[] = "QmlJSEditor.formatCommand"; const char FORMAT_COMMAND[] = "QmlJSEditor.formatCommand";
const char FORMAT_COMMAND_OPTIONS[] = "QmlJSEditor.formatCommandOptions"; const char FORMAT_COMMAND_OPTIONS[] = "QmlJSEditor.formatCommandOptions";
@@ -107,6 +108,8 @@ void QmlJsEditingSettings::fromSettings(QtcSettings *settings)
m_qmllsSettings.useLatestQmlls = settings->value(USE_LATEST_QMLLS, QVariant(false)).toBool(); m_qmllsSettings.useLatestQmlls = settings->value(USE_LATEST_QMLLS, 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
= 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();
m_useCustomFormatCommand = settings->value(CUSTOM_COMMAND, QVariant(false)).toBool(); m_useCustomFormatCommand = settings->value(CUSTOM_COMMAND, QVariant(false)).toBool();
@@ -135,6 +138,7 @@ void QmlJsEditingSettings::toSettings(QtcSettings *settings) const
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(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel); settings->setValue(DISABLE_BUILTIN_CODEMODEL, m_qmllsSettings.disableBuiltinCodemodel);
settings->setValue(GENERATE_QMLLS_INI_FILES, m_qmllsSettings.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);
@@ -402,9 +406,14 @@ 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(
Tr::tr("Generate QML Language Server .qmlls.ini configurations for new projects."));
generateQmllsIniFiles->setChecked(s.qmllsSettings().generateQmllsIniFiles);
generateQmllsIniFiles->setEnabled(s.qmllsSettings().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);
generateQmllsIniFiles->setEnabled(checked != Qt::Unchecked);
}); });
useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer")); useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer"));
@@ -457,7 +466,7 @@ public:
}, },
Group{ Group{
title(Tr::tr("QML Language Server")), title(Tr::tr("QML Language Server")),
Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls}, Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls, generateQmllsIniFiles},
}, },
Group { Group {
title(Tr::tr("Static Analyzer")), title(Tr::tr("Static Analyzer")),
@@ -503,6 +512,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().generateQmllsIniFiles = generateQmllsIniFiles->isChecked();
s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked()); s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked());
QSet<int> disabled; QSet<int> disabled;
QSet<int> disabledForNonQuickUi; QSet<int> disabledForNonQuickUi;
@@ -561,6 +571,7 @@ private:
QCheckBox *useQmlls; QCheckBox *useQmlls;
QCheckBox *useLatestQmlls; QCheckBox *useLatestQmlls;
QCheckBox *disableBuiltInCodemodel; QCheckBox *disableBuiltInCodemodel;
QCheckBox *generateQmllsIniFiles;
QComboBox *uiQmlOpenComboBox; QComboBox *uiQmlOpenComboBox;
QCheckBox *useCustomAnalyzer; QCheckBox *useCustomAnalyzer;
QTreeView *analyzerMessagesView; QTreeView *analyzerMessagesView;

View File

@@ -16,11 +16,13 @@ struct QmllsSettings
bool useQmlls = true; bool useQmlls = true;
bool useLatestQmlls = false; bool useLatestQmlls = false;
bool disableBuiltinCodemodel = false; bool disableBuiltinCodemodel = false;
bool generateQmllsIniFiles = false;
friend bool operator==(const QmllsSettings &s1, const QmllsSettings &s2) friend bool operator==(const QmllsSettings &s1, const QmllsSettings &s2)
{ {
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;
} }
friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); } friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); }
}; };