forked from qt-creator/qt-creator
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:
@@ -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_AS_SLOT[] = "SetterAsSlot";
|
||||||
const char QUICK_FIX_SETTING_SETTER_PARAMETER_NAME[] = "SetterParameterName";
|
const char QUICK_FIX_SETTING_SETTER_PARAMETER_NAME[] = "SetterParameterName";
|
||||||
const char QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING[] = "CppFileNamespaceHandling";
|
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_MEMBER_VARIABEL_NAME_TEMPLATE[] = "MemberVariableNameTemplate";
|
||||||
const char QUICK_FIX_SETTING_VALUE_TYPES[] = "ValueTypes";
|
const char QUICK_FIX_SETTING_VALUE_TYPES[] = "ValueTypes";
|
||||||
const char QUICK_FIX_SETTING_RETURN_BY_CONST_REF[] = "ReturnNonValueTypesByConstRef";
|
const char QUICK_FIX_SETTING_RETURN_BY_CONST_REF[] = "ReturnNonValueTypesByConstRef";
|
||||||
|
|||||||
@@ -1614,8 +1614,10 @@ private:
|
|||||||
CppRefactoringChanges refactoring(snapshot());
|
CppRefactoringChanges refactoring(snapshot());
|
||||||
CppRefactoringFilePtr currentFile = refactoring.file(filePath());
|
CppRefactoringFilePtr currentFile = refactoring.file(filePath());
|
||||||
Overview oo = CppCodeStyleSettings::currentProjectCodeStyleOverview();
|
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);
|
return "auto " + oo.prettyName(simpleNameAST->name);
|
||||||
|
|
||||||
TypeOfExpression typeOfExpression;
|
TypeOfExpression typeOfExpression;
|
||||||
@@ -6764,7 +6766,9 @@ private:
|
|||||||
|
|
||||||
QString deduceType() const
|
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;
|
return "auto " + m_originalName;
|
||||||
|
|
||||||
TypeOfExpression typeOfExpression;
|
TypeOfExpression typeOfExpression;
|
||||||
|
|||||||
@@ -75,6 +75,8 @@ void CppQuickFixSettings::loadSettingsFrom(QSettings *s)
|
|||||||
s->value(Constants::QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING,
|
s->value(Constants::QUICK_FIX_SETTING_CPP_FILE_NAMESPACE_HANDLING,
|
||||||
static_cast<int>(def.cppFileNamespaceHandling))
|
static_cast<int>(def.cppFileNamespaceHandling))
|
||||||
.toInt());
|
.toInt());
|
||||||
|
useAuto = s->value(Constants::QUICK_FIX_SETTING_USE_AUTO, def.useAuto).toBool();
|
||||||
|
|
||||||
memberVariableNameTemplate = s->value(Constants::QUICK_FIX_SETTING_MEMBER_VARIABEL_NAME_TEMPLATE,
|
memberVariableNameTemplate = s->value(Constants::QUICK_FIX_SETTING_MEMBER_VARIABEL_NAME_TEMPLATE,
|
||||||
def.memberVariableNameTemplate)
|
def.memberVariableNameTemplate)
|
||||||
.toString();
|
.toString();
|
||||||
@@ -169,6 +171,10 @@ void CppQuickFixSettings::saveSettingsTo(QSettings *s)
|
|||||||
Constants::QUICK_FIX_SETTING_SETTER_AS_SLOT,
|
Constants::QUICK_FIX_SETTING_SETTER_AS_SLOT,
|
||||||
setterAsSlot,
|
setterAsSlot,
|
||||||
def.setterAsSlot);
|
def.setterAsSlot);
|
||||||
|
QtcSettings::setValueWithDefault(s,
|
||||||
|
Constants::QUICK_FIX_SETTING_USE_AUTO,
|
||||||
|
useAuto,
|
||||||
|
def.useAuto);
|
||||||
QtcSettings::setValueWithDefault(s,
|
QtcSettings::setValueWithDefault(s,
|
||||||
Constants::QUICK_FIX_SETTING_VALUE_TYPES,
|
Constants::QUICK_FIX_SETTING_VALUE_TYPES,
|
||||||
valueTypes,
|
valueTypes,
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ public:
|
|||||||
QString memberVariableNameTemplate = "m_<name>";
|
QString memberVariableNameTemplate = "m_<name>";
|
||||||
QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters
|
QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters
|
||||||
bool returnByConstRef = false;
|
bool returnByConstRef = false;
|
||||||
|
bool useAuto = true;
|
||||||
std::vector<CustomTemplate> customTemplates;
|
std::vector<CustomTemplate> customTemplates;
|
||||||
};
|
};
|
||||||
} // namespace CppEditor
|
} // namespace CppEditor
|
||||||
|
|||||||
@@ -78,6 +78,7 @@ e.g. name = "m_test_foo_":
|
|||||||
QObject::connect(this->ui->pushButton_removeCustomTemplate, &QPushButton::clicked, then);
|
QObject::connect(this->ui->pushButton_removeCustomTemplate, &QPushButton::clicked, then);
|
||||||
QObject::connect(this->ui->pushButton_addValueType, &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->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->valueTypes, &QListWidget::itemChanged, then);
|
||||||
QObject::connect(this->ui->returnByConstRefCheckBox, &QCheckBox::clicked, then);
|
QObject::connect(this->ui->returnByConstRefCheckBox, &QCheckBox::clicked, then);
|
||||||
QObject::connect(this->ui->lineEdit_customTemplateAssignment, &QLineEdit::textEdited, 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->lineEdit_memberVariableName->setText(settings->memberVariableNameTemplate);
|
||||||
ui->checkBox_setterSlots->setChecked(settings->setterAsSlot);
|
ui->checkBox_setterSlots->setChecked(settings->setterAsSlot);
|
||||||
ui->checkBox_signalWithNewValue->setChecked(settings->signalWithNewValue);
|
ui->checkBox_signalWithNewValue->setChecked(settings->signalWithNewValue);
|
||||||
|
ui->useAutoCheckBox->setChecked(settings->useAuto);
|
||||||
ui->valueTypes->clear();
|
ui->valueTypes->clear();
|
||||||
for (const auto &valueType : qAsConst(settings->valueTypes)) {
|
for (const auto &valueType : qAsConst(settings->valueTypes)) {
|
||||||
auto item = new QListWidgetItem(valueType, ui->valueTypes);
|
auto item = new QListWidgetItem(valueType, ui->valueTypes);
|
||||||
@@ -199,6 +201,7 @@ void CppQuickFixSettingsWidget::saveSettings(CppQuickFixSettings *settings)
|
|||||||
} else if (ui->radioButton_generateMissingNamespace->isChecked()) {
|
} else if (ui->radioButton_generateMissingNamespace->isChecked()) {
|
||||||
settings->cppFileNamespaceHandling = CppQuickFixSettings::MissingNamespaceHandling::CreateMissing;
|
settings->cppFileNamespaceHandling = CppQuickFixSettings::MissingNamespaceHandling::CreateMissing;
|
||||||
}
|
}
|
||||||
|
settings->useAuto = ui->useAutoCheckBox->isChecked();
|
||||||
settings->valueTypes.clear();
|
settings->valueTypes.clear();
|
||||||
for (int i = 0; i < ui->valueTypes->count(); ++i) {
|
for (int i = 0; i < ui->valueTypes->count(); ++i) {
|
||||||
settings->valueTypes << ui->valueTypes->item(i)->text();
|
settings->valueTypes << ui->valueTypes->item(i)->text();
|
||||||
|
|||||||
@@ -646,6 +646,16 @@
|
|||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="useAutoCheckBox">
|
||||||
|
<property name="toolTip">
|
||||||
|
<string><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></string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Use type "auto" when creating new variables</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox_3">
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
|
|||||||
Reference in New Issue
Block a user