aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor/cppquickfixsettings.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/cppeditor/cppquickfixsettings.h')
-rw-r--r--src/plugins/cppeditor/cppquickfixsettings.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/src/plugins/cppeditor/cppquickfixsettings.h b/src/plugins/cppeditor/cppquickfixsettings.h
new file mode 100644
index 0000000000..2b13f76de0
--- /dev/null
+++ b/src/plugins/cppeditor/cppquickfixsettings.h
@@ -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