CppEditor: Let user decide whether to use "auto"

... in "Assign to Local Variable" quickfix.

Fixes: QTCREATORBUG-28099
Change-Id: I3640ef3d1e069bb2cac4d78f0ae60726b131c4fe
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2022-09-19 16:14:07 +02:00
parent a8397c129f
commit 0f7a539262
6 changed files with 27 additions and 2 deletions

View File

@@ -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";

View File

@@ -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;

View File

@@ -75,6 +75,8 @@ void CppQuickFixSettings::loadSettingsFrom(QSettings *s)
s->value(Constants::QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING,
static_cast<int>(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,

View File

@@ -130,6 +130,7 @@ public:
QString memberVariableNameTemplate = "m_<name>";
QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters
bool returnByConstRef = false;
bool useAuto = true;
std::vector<CustomTemplate> customTemplates;
};
} // namespace CppEditor

View File

@@ -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();

View File

@@ -646,6 +646,16 @@
</layout>
</widget>
</item>
<item>
<widget class="QCheckBox" name="useAutoCheckBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Uncheck this to make Qt Creator try to derive the type of expression in the &amp;quot;Assign to Local Variable&amp;quot; quickfix.&lt;/p&gt;&lt;p&gt;Note that this might fail for more complex types.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Use type &quot;auto&quot; when creating new variables</string>
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="title">