diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp index 762499aaf73..1b493a18aa9 100644 --- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp +++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp @@ -94,6 +94,7 @@ const char CMAKE_BUILD_TYPE[] = "CMake.Build.Type"; const char CLEAR_SYSTEM_ENVIRONMENT_KEY[] = "CMake.Configure.ClearSystemEnvironment"; const char USER_ENVIRONMENT_CHANGES_KEY[] = "CMake.Configure.UserEnvironmentChanges"; const char BASE_ENVIRONMENT_KEY[] = "CMake.Configure.BaseEnvironment"; +const char GENERATE_QMLLS_INI_SETTING[] = "J.QtQuick/QmlJSEditor.GenerateQmllsIniFiles"; namespace Internal { @@ -606,6 +607,18 @@ void CMakeBuildSettingsWidget::updateInitialCMakeArguments() { 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()) { if (!ci.isInitial) continue; @@ -1544,6 +1557,11 @@ CMakeBuildConfiguration::CMakeBuildConfiguration(Target *target, Id id) if (qt && qt->isQmlDebuggingSupported()) 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(target->project()); configureEnv.setUserEnvironmentChanges( getEnvironmentItemsFromCMakeConfigurePreset(cmakeProject, k)); diff --git a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp index 11c7985fd1c..f12d1ea57ae 100644 --- a/src/plugins/qmljseditor/qmljseditingsettingspage.cpp +++ b/src/plugins/qmljseditor/qmljseditingsettingspage.cpp @@ -35,6 +35,7 @@ const char FOLD_AUX_DATA[] = "QmlJSEditor.FoldAuxData"; const char USE_QMLLS[] = "QmlJSEditor.UseQmlls"; const char USE_LATEST_QMLLS[] = "QmlJSEditor.UseLatestQmlls"; const char DISABLE_BUILTIN_CODEMODEL[] = "QmlJSEditor.DisableBuiltinCodemodel"; +const char GENERATE_QMLLS_INI_FILES[] = "QmlJSEditor.GenerateQmllsIniFiles"; const char UIQML_OPEN_MODE[] = "QmlJSEditor.openUiQmlMode"; const char FORMAT_COMMAND[] = "QmlJSEditor.formatCommand"; 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.disableBuiltinCodemodel = 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_formatCommandOptions = settings->value(FORMAT_COMMAND_OPTIONS, {}).toString(); 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_LATEST_QMLLS, m_qmllsSettings.useLatestQmlls); 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_OPTIONS, m_formatCommandOptions, {}); 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->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); + generateQmllsIniFiles->setEnabled(s.qmllsSettings().useQmlls); QObject::connect(useQmlls, &QCheckBox::stateChanged, this, [this](int checked) { useLatestQmlls->setEnabled(checked != Qt::Unchecked); disableBuiltInCodemodel->setEnabled(checked != Qt::Unchecked); + generateQmllsIniFiles->setEnabled(checked != Qt::Unchecked); }); useCustomAnalyzer = new QCheckBox(Tr::tr("Use customized static analyzer")); @@ -457,7 +466,7 @@ public: }, Group{ title(Tr::tr("QML Language Server")), - Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls}, + Column{useQmlls, disableBuiltInCodemodel , useLatestQmlls, generateQmllsIniFiles}, }, Group { title(Tr::tr("Static Analyzer")), @@ -503,6 +512,7 @@ public: s.qmllsSettings().useQmlls = useQmlls->isChecked(); s.qmllsSettings().disableBuiltinCodemodel = disableBuiltInCodemodel->isChecked(); s.qmllsSettings().useLatestQmlls = useLatestQmlls->isChecked(); + s.qmllsSettings().generateQmllsIniFiles = generateQmllsIniFiles->isChecked(); s.setUseCustomAnalyzer(useCustomAnalyzer->isChecked()); QSet disabled; QSet disabledForNonQuickUi; @@ -561,6 +571,7 @@ private: QCheckBox *useQmlls; QCheckBox *useLatestQmlls; QCheckBox *disableBuiltInCodemodel; + QCheckBox *generateQmllsIniFiles; QComboBox *uiQmlOpenComboBox; QCheckBox *useCustomAnalyzer; QTreeView *analyzerMessagesView; diff --git a/src/plugins/qmljseditor/qmllssettings.h b/src/plugins/qmljseditor/qmllssettings.h index 32890d3762a..90d8ff6ca8f 100644 --- a/src/plugins/qmljseditor/qmllssettings.h +++ b/src/plugins/qmljseditor/qmllssettings.h @@ -16,11 +16,13 @@ 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.disableBuiltinCodemodel == s2.disableBuiltinCodemodel + && s1.generateQmllsIniFiles == s2.generateQmllsIniFiles; } friend bool operator!=(const QmllsSettings &s1, const QmllsSettings &s2) { return !(s1 == s2); } };