forked from qt-creator/qt-creator
CppEditor: Introduce QuickFix settings and unify getter/setter generation
Introduces a QuickFix settings page where the generation of getters and setters can be customized. The settings can be saved into a file that can go into a VCS. All QuickFixes that generate getter/setter/signals/ Q_PROPERTIES now use the same backend. QuickFixes that generate getters/ setters are now extended to also generate signals and Q_PROPERTIES. Fixes: QTCREATORBUG-1532 Fixes: QTCREATORBUG-17941 Fixes: QTCREATORBUG-12678 Fixes: QTCREATORBUG-15779 Fixes: QTCREATORBUG-11620 Fixes: QTCREATORBUG-22707 Fixes: QTCREATORBUG-20157 Fixes: QTCREATORBUG-21804 Fixes: QTCREATORBUG-19814 Fixes: QTCREATORBUG-14622 Fixes: QTCREATORBUG-19803 Change-Id: I50ed2dad9b4a637fbd87b3e1f2856060ad0ad920 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
This commit is contained in:
149
src/plugins/cppeditor/cppquickfixsettings.h
Normal file
149
src/plugins/cppeditor/cppquickfixsettings.h
Normal file
@@ -0,0 +1,149 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2020 Leander Schulten <Leander.Schulten@rwth-aachen.de>
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <utils/optional.h>
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
#include <vector>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
class QSettings;
|
||||
QT_END_NAMESPACE
|
||||
|
||||
namespace CppEditor {
|
||||
|
||||
class CppQuickFixSettings
|
||||
{
|
||||
public:
|
||||
static CppQuickFixSettings *instance()
|
||||
{
|
||||
static CppQuickFixSettings settings(true);
|
||||
return &settings;
|
||||
}
|
||||
struct CustomTemplate
|
||||
{
|
||||
QStringList types;
|
||||
QString equalComparison;
|
||||
QString returnExpression;
|
||||
QString returnType;
|
||||
QString assignment;
|
||||
};
|
||||
|
||||
struct GetterSetterTemplate
|
||||
{
|
||||
QString equalComparison = "<cur> == <new>";
|
||||
QString returnExpression = "<cur>";
|
||||
QString assignment = "<cur> = <new>";
|
||||
const static inline QString TYPE_PATTERN = "<type>";
|
||||
const static inline QString TEMPLATE_PARAMETER_PATTERN = "<T>";
|
||||
Utils::optional<QString> returnTypeTemplate;
|
||||
void replacePlaceholders(QString currentValueVariableName, QString newValueVariableName);
|
||||
};
|
||||
|
||||
enum class FunctionLocation {
|
||||
InsideClass,
|
||||
OutsideClass,
|
||||
CppFile,
|
||||
};
|
||||
enum class MissingNamespaceHandling {
|
||||
CreateMissing,
|
||||
AddUsingDirective,
|
||||
RewriteType, // e.g. change classname to namespacename::classname in cpp file
|
||||
};
|
||||
|
||||
explicit CppQuickFixSettings(bool loadGlobalSettings = false);
|
||||
|
||||
void loadGlobalSettings();
|
||||
void loadSettingsFrom(QSettings *);
|
||||
void saveSettingsTo(QSettings *);
|
||||
void saveAsGlobalSettings();
|
||||
void setDefaultSettings();
|
||||
|
||||
static QString replaceNamePlaceholders(const QString &nameTemplate, const QString &name);
|
||||
bool isValueType(QString type) const;
|
||||
GetterSetterTemplate findGetterSetterTemplate(QString fullyQualifiedType) const;
|
||||
|
||||
QString getGetterName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(getterNameTemplate, variableName);
|
||||
}
|
||||
QString getSetterName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(setterNameTemplate, variableName);
|
||||
}
|
||||
QString getSignalName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(signalNameTemplate, variableName);
|
||||
}
|
||||
QString getResetName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(resetNameTemplate, variableName);
|
||||
}
|
||||
QString getSetterParameterName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(setterParameterNameTemplate, variableName);
|
||||
}
|
||||
QString getMemberVariableName(const QString &variableName) const
|
||||
{
|
||||
return replaceNamePlaceholders(memberVariableNameTemplate, variableName);
|
||||
}
|
||||
FunctionLocation determineGetterLocation(int lineCount) const;
|
||||
FunctionLocation determineSetterLocation(int lineCount) const;
|
||||
bool createMissingNamespacesinCppFile() const
|
||||
{
|
||||
return cppFileNamespaceHandling == MissingNamespaceHandling::CreateMissing;
|
||||
}
|
||||
bool addUsingNamespaceinCppFile() const
|
||||
{
|
||||
return cppFileNamespaceHandling == MissingNamespaceHandling::AddUsingDirective;
|
||||
}
|
||||
bool rewriteTypesinCppFile() const
|
||||
{
|
||||
return cppFileNamespaceHandling == MissingNamespaceHandling::RewriteType;
|
||||
}
|
||||
|
||||
public:
|
||||
int getterOutsideClassFrom = 0;
|
||||
int getterInCppFileFrom = 2;
|
||||
int setterOutsideClassFrom = 0;
|
||||
int setterInCppFileFrom = 2;
|
||||
QString getterAttributes; // e.g. [[nodiscard]]
|
||||
QString getterNameTemplate = "<name>"; // or get<Name>
|
||||
QString setterNameTemplate = "set<Name>"; // or set_<name> or Set<Name>
|
||||
QString setterParameterNameTemplate = "new<Name>";
|
||||
QString signalNameTemplate = "<name>Changed";
|
||||
QString resetNameTemplate = "reset<Name>";
|
||||
bool signalWithNewValue = false;
|
||||
bool setterAsSlot = false;
|
||||
MissingNamespaceHandling cppFileNamespaceHandling = MissingNamespaceHandling::CreateMissing;
|
||||
QString memberVariableNameTemplate = "m_<name>";
|
||||
QStringList valueTypes; // if contains use value. Ignores namespaces and template parameters
|
||||
std::vector<CustomTemplate> customTemplates;
|
||||
};
|
||||
} // namespace CppEditor
|
||||
Reference in New Issue
Block a user