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_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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -646,6 +646,16 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="QGroupBox" name="groupBox_3">
|
||||
<property name="title">
|
||||
|
||||
Reference in New Issue
Block a user