diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-06-21 11:16:39 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2016-06-22 12:22:57 +0000 |
commit | 1ea640433736d599a2ec0cb716924db1560f59a3 (patch) | |
tree | c19e3d55c5d4200b0aa15a64e0342969fb7d2528 /src/plugins | |
parent | b928a1ce46a810941a54c42b20f4692f2db2ebb0 (diff) | |
download | qt-creator-1ea640433736d599a2ec0cb716924db1560f59a3.tar.gz |
CppTools: Allow prefering getter names with "get" prefix
We default to "foo()" for e.g. a member variable "m_foo", but other
coding styles require "getFoo()".
Task-number: QTCREATORBUG-16452
Change-Id: I9ccfdf88e4c469bc1c06fde855ad754faf2bd238
Reviewed-by: André Hartmann <aha_1980@gmx.de>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/cppeditor/cppeditorplugin.h | 1 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfix_test.cpp | 79 | ||||
-rw-r--r-- | src/plugins/cppeditor/cppquickfixes.cpp | 3 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettings.cpp | 64 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettings.h | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettingspage.cpp | 4 | ||||
-rw-r--r-- | src/plugins/cpptools/cppcodestylesettingspage.ui | 27 |
7 files changed, 156 insertions, 27 deletions
diff --git a/src/plugins/cppeditor/cppeditorplugin.h b/src/plugins/cppeditor/cppeditorplugin.h index eb59a3a079..35c7fca23e 100644 --- a/src/plugins/cppeditor/cppeditorplugin.h +++ b/src/plugins/cppeditor/cppeditorplugin.h @@ -117,6 +117,7 @@ private slots: void test_quickfix_GenerateGetterSetter_basicGetterWithPrefixAndNamespaceToCpp(); void test_quickfix_GenerateGetterSetter_onlyGetter(); + void test_quickfix_GenerateGetterSetter_onlyGetter_DontPreferGetterWithGet(); void test_quickfix_GenerateGetterSetter_onlySetter(); void test_quickfix_GenerateGetterSetter_offerGetterWhenSetterPresent(); void test_quickfix_GenerateGetterSetter_offerSetterWhenGetterPresent(); diff --git a/src/plugins/cppeditor/cppquickfix_test.cpp b/src/plugins/cppeditor/cppquickfix_test.cpp index ddd2b5097d..742106252a 100644 --- a/src/plugins/cppeditor/cppquickfix_test.cpp +++ b/src/plugins/cppeditor/cppquickfix_test.cpp @@ -1890,6 +1890,85 @@ void CppEditorPlugin::test_quickfix_GenerateGetterSetter_onlySetter() QuickFixOperationTest(testDocuments, &factory, ProjectPartHeaderPaths(), 2); } +class CppCodeStyleSettingsChanger { +public: + CppCodeStyleSettingsChanger(const CppCodeStyleSettings &settings); + ~CppCodeStyleSettingsChanger(); // Restore original + + static CppCodeStyleSettings currentSettings(); + +private: + void setSettings(const CppCodeStyleSettings &settings); + + CppCodeStyleSettings m_originalSettings; +}; + +CppCodeStyleSettingsChanger::CppCodeStyleSettingsChanger(const CppCodeStyleSettings &settings) +{ + m_originalSettings = currentSettings(); + setSettings(settings); +} + +CppCodeStyleSettingsChanger::~CppCodeStyleSettingsChanger() +{ + setSettings(m_originalSettings); +} + +void CppCodeStyleSettingsChanger::setSettings(const CppCodeStyleSettings &settings) +{ + QVariant variant; + variant.setValue(settings); + + CppCodeStylePreferences *preferences = CppToolsSettings::instance()->cppCodeStyle(); + preferences->currentDelegate()->setValue(variant); +} + +CppCodeStyleSettings CppCodeStyleSettingsChanger::currentSettings() +{ + CppCodeStylePreferences *preferences = CppToolsSettings::instance()->cppCodeStyle(); + return preferences->currentDelegate()->value().value<CppCodeStyleSettings>(); +} + +void CppEditorPlugin::test_quickfix_GenerateGetterSetter_onlyGetter_DontPreferGetterWithGet() +{ + CppCodeStyleSettings modifiedSettings = CppCodeStyleSettingsChanger::currentSettings(); + modifiedSettings.preferGetterNameWithoutGetPrefix = false; + CppCodeStyleSettingsChanger changer(modifiedSettings); + + QList<QuickFixTestDocument::Ptr> testDocuments; + QByteArray original; + QByteArray expected; + + // Header File + original = + "class Foo\n" + "{\n" + "public:\n" + " int m_bar@;\n" + "};\n"; + expected = + "class Foo\n" + "{\n" + "public:\n" + " int m_bar@;\n" + " int getBar() const;\n" + "};\n"; + testDocuments << QuickFixTestDocument::create("file.h", original, expected); + + // Source File + original.resize(0); + expected = + "\n" + "int Foo::getBar() const\n" + "{\n" + " return m_bar;\n" + "}\n"; + testDocuments << QuickFixTestDocument::create("file.cpp", original, expected); + + GenerateGetterSetter factory; + QuickFixOperationTest(testDocuments, &factory, ProjectPartHeaderPaths(), 1); +} + /// Checks: Offer a "generate getter" quick fix if there is a setter void CppEditorPlugin::test_quickfix_GenerateGetterSetter_offerGetterWhenSetterPresent() { diff --git a/src/plugins/cppeditor/cppquickfixes.cpp b/src/plugins/cppeditor/cppquickfixes.cpp index 604243d6d3..cb9df1eb31 100644 --- a/src/plugins/cppeditor/cppquickfixes.cpp +++ b/src/plugins/cppeditor/cppquickfixes.cpp @@ -5967,9 +5967,10 @@ void GenerateGetterSetterOperation::determineGetterSetterNames() m_baseName = QLatin1String("value"); // Getter Name + const CppCodeStyleSettings settings = CppCodeStyleSettings::currentProjectCodeStyle(); const bool hasValidBaseName = m_baseName != m_variableString; const bool getPrefixIsAlreadyUsed = hasClassMemberWithGetPrefix(m_classSpecifier->symbol); - if (hasValidBaseName && !getPrefixIsAlreadyUsed) { + if (settings.preferGetterNameWithoutGetPrefix && hasValidBaseName && !getPrefixIsAlreadyUsed) { m_getterName = m_baseName; } else { const QString baseNameWithCapital = m_baseName.left(1).toUpper() + m_baseName.mid(1); diff --git a/src/plugins/cpptools/cppcodestylesettings.cpp b/src/plugins/cpptools/cppcodestylesettings.cpp index a0d618225c..06d396e59c 100644 --- a/src/plugins/cpptools/cppcodestylesettings.cpp +++ b/src/plugins/cpptools/cppcodestylesettings.cpp @@ -59,6 +59,7 @@ static const char bindStarToLeftSpecifierKey[] = "BindStarToLeftSpecifier"; static const char bindStarToRightSpecifierKey[] = "BindStarToRightSpecifier"; static const char extraPaddingForConditionsIfConfusingAlignKey[] = "ExtraPaddingForConditionsIfConfusingAlign"; static const char alignAssignmentsKey[] = "AlignAssignments"; +static const char shortGetterNameKey[] = "ShortGetterName"; using namespace CppTools; @@ -85,6 +86,7 @@ CppCodeStyleSettings::CppCodeStyleSettings() : , bindStarToRightSpecifier(false) , extraPaddingForConditionsIfConfusingAlign(true) , alignAssignments(false) + , preferGetterNameWithoutGetPrefix(true) { } @@ -121,6 +123,7 @@ void CppCodeStyleSettings::toMap(const QString &prefix, QVariantMap *map) const map->insert(prefix + QLatin1String(bindStarToRightSpecifierKey), bindStarToRightSpecifier); map->insert(prefix + QLatin1String(extraPaddingForConditionsIfConfusingAlignKey), extraPaddingForConditionsIfConfusingAlign); map->insert(prefix + QLatin1String(alignAssignmentsKey), alignAssignments); + map->insert(prefix + QLatin1String(shortGetterNameKey), preferGetterNameWithoutGetPrefix); } void CppCodeStyleSettings::fromMap(const QString &prefix, const QVariantMap &map) @@ -165,6 +168,8 @@ void CppCodeStyleSettings::fromMap(const QString &prefix, const QVariantMap &map extraPaddingForConditionsIfConfusingAlign).toBool(); alignAssignments = map.value(prefix + QLatin1String(alignAssignmentsKey), alignAssignments).toBool(); + preferGetterNameWithoutGetPrefix = map.value(prefix + QLatin1String(shortGetterNameKey), + preferGetterNameWithoutGetPrefix).toBool(); } bool CppCodeStyleSettings::equals(const CppCodeStyleSettings &rhs) const @@ -188,7 +193,37 @@ bool CppCodeStyleSettings::equals(const CppCodeStyleSettings &rhs) const && bindStarToLeftSpecifier == rhs.bindStarToLeftSpecifier && bindStarToRightSpecifier == rhs.bindStarToRightSpecifier && extraPaddingForConditionsIfConfusingAlign == rhs.extraPaddingForConditionsIfConfusingAlign - && alignAssignments == rhs.alignAssignments; + && alignAssignments == rhs.alignAssignments + && preferGetterNameWithoutGetPrefix == rhs.preferGetterNameWithoutGetPrefix + ; +} + +CppCodeStyleSettings CppCodeStyleSettings::currentProjectCodeStyle() +{ + ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject(); + if (!project) + return currentGlobalCodeStyle(); + + ProjectExplorer::EditorConfiguration *editorConfiguration = project->editorConfiguration(); + QTC_ASSERT(editorConfiguration, return currentGlobalCodeStyle()); + + TextEditor::ICodeStylePreferences *codeStylePreferences + = editorConfiguration->codeStyle(Constants::CPP_SETTINGS_ID); + QTC_ASSERT(codeStylePreferences, return currentGlobalCodeStyle()); + + CppCodeStylePreferences *cppCodeStylePreferences + = dynamic_cast<CppCodeStylePreferences *>(codeStylePreferences); + QTC_ASSERT(cppCodeStylePreferences, return currentGlobalCodeStyle()); + + return cppCodeStylePreferences->currentCodeStyleSettings(); +} + +CppCodeStyleSettings CppCodeStyleSettings::currentGlobalCodeStyle() +{ + CppCodeStylePreferences *cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle(); + QTC_ASSERT(cppCodeStylePreferences, return CppCodeStyleSettings()); + + return cppCodeStylePreferences->currentCodeStyleSettings(); } static void configureOverviewWithCodeStyleSettings(CPlusPlus::Overview &overview, @@ -207,37 +242,14 @@ static void configureOverviewWithCodeStyleSettings(CPlusPlus::Overview &overview CPlusPlus::Overview CppCodeStyleSettings::currentProjectCodeStyleOverview() { - ProjectExplorer::Project *project = ProjectExplorer::ProjectTree::currentProject(); - if (!project) - return currentGlobalCodeStyleOverview(); - - ProjectExplorer::EditorConfiguration *editorConfiguration = project->editorConfiguration(); - QTC_ASSERT(editorConfiguration, return currentGlobalCodeStyleOverview()); - - TextEditor::ICodeStylePreferences *codeStylePreferences - = editorConfiguration->codeStyle(Constants::CPP_SETTINGS_ID); - QTC_ASSERT(codeStylePreferences, return currentGlobalCodeStyleOverview()); - - CppCodeStylePreferences *cppCodeStylePreferences - = dynamic_cast<CppCodeStylePreferences *>(codeStylePreferences); - QTC_ASSERT(cppCodeStylePreferences, return currentGlobalCodeStyleOverview()); - - CppCodeStyleSettings settings = cppCodeStylePreferences->currentCodeStyleSettings(); - CPlusPlus::Overview overview; - configureOverviewWithCodeStyleSettings(overview, settings); + configureOverviewWithCodeStyleSettings(overview, currentProjectCodeStyle()); return overview; } CPlusPlus::Overview CppCodeStyleSettings::currentGlobalCodeStyleOverview() { CPlusPlus::Overview overview; - - CppCodeStylePreferences *cppCodeStylePreferences = CppToolsSettings::instance()->cppCodeStyle(); - QTC_ASSERT(cppCodeStylePreferences, return overview); - - CppCodeStyleSettings settings = cppCodeStylePreferences->currentCodeStyleSettings(); - - configureOverviewWithCodeStyleSettings(overview, settings); + configureOverviewWithCodeStyleSettings(overview, currentGlobalCodeStyle()); return overview; } diff --git a/src/plugins/cpptools/cppcodestylesettings.h b/src/plugins/cpptools/cppcodestylesettings.h index 60dcc2fbf6..f69d72d0ab 100644 --- a/src/plugins/cpptools/cppcodestylesettings.h +++ b/src/plugins/cpptools/cppcodestylesettings.h @@ -80,6 +80,8 @@ public: // b bool alignAssignments; + bool preferGetterNameWithoutGetPrefix; + void toSettings(const QString &category, QSettings *s) const; void fromSettings(const QString &category, const QSettings *s); @@ -90,6 +92,9 @@ public: bool operator==(const CppCodeStyleSettings &s) const { return equals(s); } bool operator!=(const CppCodeStyleSettings &s) const { return !equals(s); } + static CppCodeStyleSettings currentProjectCodeStyle(); + static CppCodeStyleSettings currentGlobalCodeStyle(); + /*! Returns an Overview configured by the current project's code style. If no current project is available or an error occurs when getting the diff --git a/src/plugins/cpptools/cppcodestylesettingspage.cpp b/src/plugins/cpptools/cppcodestylesettingspage.cpp index 8af93ff100..46d6ee6985 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.cpp +++ b/src/plugins/cpptools/cppcodestylesettingspage.cpp @@ -321,6 +321,8 @@ CppCodeStylePreferencesWidget::CppCodeStylePreferencesWidget(QWidget *parent) this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged); connect(m_ui->bindStarToRightSpecifier, &QCheckBox::toggled, this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged); + connect(m_ui->preferGetterNamesWithoutGet, &QCheckBox::toggled, + this, &CppCodeStylePreferencesWidget::slotCodeStyleSettingsChanged); m_ui->categoryTab->setCurrentIndex(0); @@ -380,6 +382,7 @@ CppCodeStyleSettings CppCodeStylePreferencesWidget::cppCodeStyleSettings() const set.bindStarToRightSpecifier = m_ui->bindStarToRightSpecifier->isChecked(); set.extraPaddingForConditionsIfConfusingAlign = m_ui->extraPaddingConditions->isChecked(); set.alignAssignments = m_ui->alignAssignments->isChecked(); + set.preferGetterNameWithoutGetPrefix = m_ui->preferGetterNamesWithoutGet->isChecked(); return set; } @@ -413,6 +416,7 @@ void CppCodeStylePreferencesWidget::setCodeStyleSettings(const CppCodeStyleSetti m_ui->bindStarToRightSpecifier->setChecked(s.bindStarToRightSpecifier); m_ui->extraPaddingConditions->setChecked(s.extraPaddingForConditionsIfConfusingAlign); m_ui->alignAssignments->setChecked(s.alignAssignments); + m_ui->preferGetterNamesWithoutGet->setChecked(s.preferGetterNameWithoutGetPrefix); m_blockUpdates = wasBlocked; if (preview) updatePreview(); diff --git a/src/plugins/cpptools/cppcodestylesettingspage.ui b/src/plugins/cpptools/cppcodestylesettingspage.ui index 0206b96549..9934259608 100644 --- a/src/plugins/cpptools/cppcodestylesettingspage.ui +++ b/src/plugins/cpptools/cppcodestylesettingspage.ui @@ -484,6 +484,33 @@ if they would align to the next line</string> </item> </layout> </widget> + <widget class="QWidget" name="getterSetterTab"> + <attribute name="title"> + <string>Getter and Setter</string> + </attribute> + <layout class="QVBoxLayout" name="verticalLayout_7"> + <item> + <widget class="QCheckBox" name="preferGetterNamesWithoutGet"> + <property name="text"> + <string>Prefer getter names without "get"</string> + </property> + </widget> + </item> + <item> + <spacer name="verticalSpacer_7"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> </widget> </item> </layout> |