diff --git a/src/plugins/cppeditor/cppeditorconstants.h b/src/plugins/cppeditor/cppeditorconstants.h index 6eb24c688b1..ab30f790f0f 100644 --- a/src/plugins/cppeditor/cppeditorconstants.h +++ b/src/plugins/cppeditor/cppeditorconstants.h @@ -47,6 +47,7 @@ const char QUICK_FIX_SETTING_SIGNAL_WITH_NEW_VALUE[] = "SignalWithNewValue"; const char QUICK_FIX_SETTING_SETTER_AS_SLOT[] = "SetterAsSlot"; const char QUICK_FIX_SETTING_SETTER_PARAMETER_NAME[] = "SetterParameterName"; const char QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING[] = "CppFileNamespaceHandling"; +const char QUICK_FIX_SETTING_USE_AUTO[] = "UseAutoInAssignToVar"; const char QUICK_FIX_SETTING_MEMBER_VARIABEL_NAME_TEMPLATE[] = "MemberVariableNameTemplate"; const char QUICK_FIX_SETTING_VALUE_TYPES[] = "ValueTypes"; const char QUICK_FIX_SETTING_RETURN_BY_CONST_REF[] = "ReturnNonValueTypesByConstRef"; diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index b1273e53366..e1f42967e5a 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -1614,8 +1614,10 @@ private: CppRefactoringChanges refactoring(snapshot()); CppRefactoringFilePtr currentFile = refactoring.file(filePath()); Overview oo = CppCodeStyleSettings::currentProjectCodeStyleOverview(); + const auto settings = CppQuickFixProjectsSettings::getQuickFixSettings( + ProjectExplorer::ProjectTree::currentProject()); - if (currentFile->cppDocument()->languageFeatures().cxx11Enabled) + if (currentFile->cppDocument()->languageFeatures().cxx11Enabled && settings->useAuto) return "auto " + oo.prettyName(simpleNameAST->name); TypeOfExpression typeOfExpression; @@ -6764,7 +6766,9 @@ private: QString deduceType() const { - if (m_file->cppDocument()->languageFeatures().cxx11Enabled) + const auto settings = CppQuickFixProjectsSettings::getQuickFixSettings( + ProjectExplorer::ProjectTree::currentProject()); + if (m_file->cppDocument()->languageFeatures().cxx11Enabled && settings->useAuto) return "auto " + m_originalName; TypeOfExpression typeOfExpression; diff --git a/src/plugins/cppeditor/cppquickfixsettings.cpp b/src/plugins/cppeditor/cppquickfixsettings.cpp index e435607f019..211fa0c8381 100644 --- a/src/plugins/cppeditor/cppquickfixsettings.cpp +++ b/src/plugins/cppeditor/cppquickfixsettings.cpp @@ -75,6 +75,8 @@ void CppQuickFixSettings::loadSettingsFrom(QSettings *s) s->value(Constants::QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING, static_cast(def.cppFileNamespaceHandling)) .toInt()); + useAuto = s->value(Constants::QUICK_FIX_SETTING_USE_AUTO, def.useAuto).toBool(); + memberVariableNameTemplate = s->value(Constants::QUICK_FIX_SETTING_MEMBER_VARIABEL_NAME_TEMPLATE, def.memberVariableNameTemplate) .toString(); @@ -169,6 +171,10 @@ void CppQuickFixSettings::saveSettingsTo(QSettings *s) Constants::QUICK_FIX_SETTING_SETTER_AS_SLOT, setterAsSlot, def.setterAsSlot); + QtcSettings::setValueWithDefault(s, + Constants::QUICK_FIX_SETTING_USE_AUTO, + useAuto, + def.useAuto); QtcSettings::setValueWithDefault(s, Constants::QUICK_FIX_SETTING_VALUE_TYPES, valueTypes, diff --git a/src/plugins/cppeditor/cppquickfixsettings.h b/src/plugins/cppeditor/cppquickfixsettings.h index ea16c870fb9..4482f820123 100644 --- a/src/plugins/cppeditor/cppquickfixsettings.h +++ b/src/plugins/cppeditor/cppquickfixsettings.h @@ -130,6 +130,7 @@ public: QString memberVariableNameTemplate = "m_"; QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters bool returnByConstRef = false; + bool useAuto = true; std::vector customTemplates; }; } // namespace CppEditor diff --git a/src/plugins/cppeditor/cppquickfixsettingswidget.cpp b/src/plugins/cppeditor/cppquickfixsettingswidget.cpp index 9314444c8d1..2917dca1491 100644 --- a/src/plugins/cppeditor/cppquickfixsettingswidget.cpp +++ b/src/plugins/cppeditor/cppquickfixsettingswidget.cpp @@ -78,6 +78,7 @@ e.g. name = "m_test_foo_": QObject::connect(this->ui->pushButton_removeCustomTemplate, &QPushButton::clicked, then); QObject::connect(this->ui->pushButton_addValueType, &QPushButton::clicked, then); QObject::connect(this->ui->pushButton_removeValueType, &QPushButton::clicked, then); + QObject::connect(this->ui->useAutoCheckBox, &QCheckBox::clicked, then); QObject::connect(this->ui->valueTypes, &QListWidget::itemChanged, then); QObject::connect(this->ui->returnByConstRefCheckBox, &QCheckBox::clicked, then); QObject::connect(this->ui->lineEdit_customTemplateAssignment, &QLineEdit::textEdited, then); @@ -137,6 +138,7 @@ void CppQuickFixSettingsWidget::loadSettings(CppQuickFixSettings *settings) ui->lineEdit_memberVariableName->setText(settings->memberVariableNameTemplate); ui->checkBox_setterSlots->setChecked(settings->setterAsSlot); ui->checkBox_signalWithNewValue->setChecked(settings->signalWithNewValue); + ui->useAutoCheckBox->setChecked(settings->useAuto); ui->valueTypes->clear(); for (const auto &valueType : qAsConst(settings->valueTypes)) { auto item = new QListWidgetItem(valueType, ui->valueTypes); @@ -199,6 +201,7 @@ void CppQuickFixSettingsWidget::saveSettings(CppQuickFixSettings *settings) } else if (ui->radioButton_generateMissingNamespace->isChecked()) { settings->cppFileNamespaceHandling = CppQuickFixSettings::MissingNamespaceHandling::CreateMissing; } + settings->useAuto = ui->useAutoCheckBox->isChecked(); settings->valueTypes.clear(); for (int i = 0; i < ui->valueTypes->count(); ++i) { settings->valueTypes << ui->valueTypes->item(i)->text(); diff --git a/src/plugins/cppeditor/cppquickfixsettingswidget.ui b/src/plugins/cppeditor/cppquickfixsettingswidget.ui index 692eddda9bc..828759003f0 100644 --- a/src/plugins/cppeditor/cppquickfixsettingswidget.ui +++ b/src/plugins/cppeditor/cppquickfixsettingswidget.ui @@ -646,6 +646,16 @@ + + + + <html><head/><body><p>Uncheck this to make Qt Creator try to derive the type of expression in the &quot;Assign to Local Variable&quot; quickfix.</p><p>Note that this might fail for more complex types.</p></body></html> + + + Use type "auto" when creating new variables + + +