From d7360c2b08838aeb83fdf4f22d7153e7f0f39f36 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Fri, 17 May 2024 10:58:24 +0200 Subject: [PATCH] CppEditor: Move RearrangeParamDeclarationList quickfix to its own files Change-Id: I71354ebf11d943531fef1f417e389ae28b964ccb Reviewed-by: Reviewed-by: Christian Stenger --- src/plugins/cppeditor/CMakeLists.txt | 1 + src/plugins/cppeditor/cppeditor.qbs | 2 + .../cppeditor/quickfixes/cppquickfixes.cpp | 84 +----------- .../cppeditor/quickfixes/cppquickfixes.h | 12 -- .../rearrangeparamdeclarationlist.cpp | 124 ++++++++++++++++++ .../rearrangeparamdeclarationlist.h | 8 ++ 6 files changed, 137 insertions(+), 94 deletions(-) create mode 100644 src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.cpp create mode 100644 src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.h diff --git a/src/plugins/cppeditor/CMakeLists.txt b/src/plugins/cppeditor/CMakeLists.txt index bdfe7b22837..fab94d2f462 100644 --- a/src/plugins/cppeditor/CMakeLists.txt +++ b/src/plugins/cppeditor/CMakeLists.txt @@ -122,6 +122,7 @@ add_qtc_plugin(CppEditor quickfixes/logicaloperationquickfixes.cpp quickfixes/logicaloperationquickfixes.h quickfixes/moveclasstoownfile.cpp quickfixes/moveclasstoownfile.h quickfixes/movefunctiondefinition.cpp quickfixes/movefunctiondefinition.h + quickfixes/rearrangeparamdeclarationlist.cpp quickfixes/rearrangeparamdeclarationlist.h quickfixes/removeusingnamespace.cpp quickfixes/removeusingnamespace.h quickfixes/rewritecomment.cpp quickfixes/rewritecomment.cpp quickfixes/rewritecontrolstatements.cpp quickfixes/rewritecontrolstatements.h diff --git a/src/plugins/cppeditor/cppeditor.qbs b/src/plugins/cppeditor/cppeditor.qbs index c02ed9b8e6e..bad08132a75 100644 --- a/src/plugins/cppeditor/cppeditor.qbs +++ b/src/plugins/cppeditor/cppeditor.qbs @@ -273,6 +273,8 @@ QtcPlugin { "moveclasstoownfile.h", "movefunctiondefinition.cpp", "movefunctiondefinition.h", + "rearrangeparamdeclarationlist.cpp", + "rearrangeparamdeclarationlist.h", "removeusingnamespace.cpp", "removeusingnamespace.h", "rewritecomment.cpp", diff --git a/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp b/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp index 46af51d38cb..74ad56d509f 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp +++ b/src/plugins/cppeditor/quickfixes/cppquickfixes.cpp @@ -31,6 +31,7 @@ #include "logicaloperationquickfixes.h" #include "moveclasstoownfile.h" #include "movefunctiondefinition.h" +#include "rearrangeparamdeclarationlist.h" #include "removeusingnamespace.h" #include "rewritecomment.h" #include "rewritecontrolstatements.h" @@ -135,87 +136,6 @@ namespace Internal { namespace { -class RearrangeParamDeclarationListOp: public CppQuickFixOperation -{ -public: - enum Target { TargetPrevious, TargetNext }; - - RearrangeParamDeclarationListOp(const CppQuickFixInterface &interface, AST *currentParam, - AST *targetParam, Target target) - : CppQuickFixOperation(interface) - , m_currentParam(currentParam) - , m_targetParam(targetParam) - { - QString targetString; - if (target == TargetPrevious) - targetString = Tr::tr("Switch with Previous Parameter"); - else - targetString = Tr::tr("Switch with Next Parameter"); - setDescription(targetString); - } - - void perform() override - { - CppRefactoringChanges refactoring(snapshot()); - CppRefactoringFilePtr currentFile = refactoring.cppFile(filePath()); - - int targetEndPos = currentFile->endOf(m_targetParam); - ChangeSet changes; - changes.flip(currentFile->startOf(m_currentParam), currentFile->endOf(m_currentParam), - currentFile->startOf(m_targetParam), targetEndPos); - currentFile->setChangeSet(changes); - currentFile->setOpenEditor(false, targetEndPos); - currentFile->apply(); - } - -private: - AST *m_currentParam; - AST *m_targetParam; -}; - -} // anonymous namespace - -void RearrangeParamDeclarationList::doMatch(const CppQuickFixInterface &interface, - QuickFixOperations &result) -{ - const QList path = interface.path(); - - ParameterDeclarationAST *paramDecl = nullptr; - int index = path.size() - 1; - for (; index != -1; --index) { - paramDecl = path.at(index)->asParameterDeclaration(); - if (paramDecl) - break; - } - - if (index < 1) - return; - - ParameterDeclarationClauseAST *paramDeclClause = path.at(index-1)->asParameterDeclarationClause(); - QTC_ASSERT(paramDeclClause && paramDeclClause->parameter_declaration_list, return); - - ParameterDeclarationListAST *paramListNode = paramDeclClause->parameter_declaration_list; - ParameterDeclarationListAST *prevParamListNode = nullptr; - while (paramListNode) { - if (paramDecl == paramListNode->value) - break; - prevParamListNode = paramListNode; - paramListNode = paramListNode->next; - } - - if (!paramListNode) - return; - - if (prevParamListNode) - result << new RearrangeParamDeclarationListOp(interface, paramListNode->value, - prevParamListNode->value, RearrangeParamDeclarationListOp::TargetPrevious); - if (paramListNode->next) - result << new RearrangeParamDeclarationListOp(interface, paramListNode->value, - paramListNode->next->value, RearrangeParamDeclarationListOp::TargetNext); -} - -namespace { - class ReformatPointerDeclarationOp: public CppQuickFixOperation { public: @@ -384,7 +304,6 @@ void ExtraRefactoringOperations::doMatch(const CppQuickFixInterface &interface, void createCppQuickFixes() { - new RearrangeParamDeclarationList; new ReformatPointerDeclaration; new ApplyDeclDefLinkChanges; @@ -411,6 +330,7 @@ void createCppQuickFixes() registerSplitSimpleDeclarationQuickfix(); registerConvertNumericLiteralQuickfix(); registerConvertToCamelCaseQuickfix(); + registerRearrangeParamDeclarationListQuickfix(); new ExtraRefactoringOperations; } diff --git a/src/plugins/cppeditor/quickfixes/cppquickfixes.h b/src/plugins/cppeditor/quickfixes/cppquickfixes.h index c53c66bd847..2b5c241aa11 100644 --- a/src/plugins/cppeditor/quickfixes/cppquickfixes.h +++ b/src/plugins/cppeditor/quickfixes/cppquickfixes.h @@ -28,18 +28,6 @@ public: void doMatch(const CppQuickFixInterface &interface, QuickFixOperations &result) override; }; -/*! - Switches places of the parameter declaration under cursor - with the next or the previous one in the parameter declaration list - - Activates on: parameter declarations -*/ -class RearrangeParamDeclarationList : public CppQuickFixFactory -{ -public: - void doMatch(const CppQuickFixInterface &interface, QuickFixOperations &result) override; -}; - /*! Reformats a pointer, reference or rvalue reference type/declaration. diff --git a/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.cpp b/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.cpp new file mode 100644 index 00000000000..c93567ee3cf --- /dev/null +++ b/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.cpp @@ -0,0 +1,124 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#include "rearrangeparamdeclarationlist.h" + +#include "../cppeditortr.h" +#include "../cpprefactoringchanges.h" +#include "cppquickfix.h" + +#ifdef WITH_TESTS +#include +#endif + +using namespace CPlusPlus; + +namespace CppEditor::Internal { +namespace { + +class RearrangeParamDeclarationListOp: public CppQuickFixOperation +{ +public: + enum Target { TargetPrevious, TargetNext }; + + RearrangeParamDeclarationListOp(const CppQuickFixInterface &interface, AST *currentParam, + AST *targetParam, Target target) + : CppQuickFixOperation(interface) + , m_currentParam(currentParam) + , m_targetParam(targetParam) + { + QString targetString; + if (target == TargetPrevious) + targetString = Tr::tr("Switch with Previous Parameter"); + else + targetString = Tr::tr("Switch with Next Parameter"); + setDescription(targetString); + } + + void perform() override + { + CppRefactoringChanges refactoring(snapshot()); + CppRefactoringFilePtr currentFile = refactoring.cppFile(filePath()); + + int targetEndPos = currentFile->endOf(m_targetParam); + Utils::ChangeSet changes; + changes.flip(currentFile->startOf(m_currentParam), currentFile->endOf(m_currentParam), + currentFile->startOf(m_targetParam), targetEndPos); + currentFile->setChangeSet(changes); + currentFile->setOpenEditor(false, targetEndPos); + currentFile->apply(); + } + +private: + AST *m_currentParam; + AST *m_targetParam; +}; + + +/*! + Switches places of the parameter declaration under cursor + with the next or the previous one in the parameter declaration list + + Activates on: parameter declarations +*/ +class RearrangeParamDeclarationList : public CppQuickFixFactory +{ +#ifdef WITH_TESTS +public: + static QObject *createTest() { return new QObject; } +#endif + + void doMatch(const CppQuickFixInterface &interface, QuickFixOperations &result) override + { + const QList path = interface.path(); + + ParameterDeclarationAST *paramDecl = nullptr; + int index = path.size() - 1; + for (; index != -1; --index) { + paramDecl = path.at(index)->asParameterDeclaration(); + if (paramDecl) + break; + } + + if (index < 1) + return; + + ParameterDeclarationClauseAST *paramDeclClause + = path.at(index - 1)->asParameterDeclarationClause(); + QTC_ASSERT(paramDeclClause && paramDeclClause->parameter_declaration_list, return); + + ParameterDeclarationListAST *paramListNode = paramDeclClause->parameter_declaration_list; + ParameterDeclarationListAST *prevParamListNode = nullptr; + while (paramListNode) { + if (paramDecl == paramListNode->value) + break; + prevParamListNode = paramListNode; + paramListNode = paramListNode->next; + } + + if (!paramListNode) + return; + + if (prevParamListNode) + result << new RearrangeParamDeclarationListOp( + interface, + paramListNode->value, + prevParamListNode->value, + RearrangeParamDeclarationListOp::TargetPrevious); + if (paramListNode->next) + result << new RearrangeParamDeclarationListOp( + interface, + paramListNode->value, + paramListNode->next->value, + RearrangeParamDeclarationListOp::TargetNext); + } +}; + +} // namespace + +void registerRearrangeParamDeclarationListQuickfix() +{ + CppQuickFixFactory::registerFactory(); +} + +} // namespace CppEditor::Internal diff --git a/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.h b/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.h new file mode 100644 index 00000000000..6fa78885d98 --- /dev/null +++ b/src/plugins/cppeditor/quickfixes/rearrangeparamdeclarationlist.h @@ -0,0 +1,8 @@ +// Copyright (C) 2024 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 + +#pragma once + +namespace CppEditor::Internal { +void registerRearrangeParamDeclarationListQuickfix(); +} // namespace CppEditor::Internal