remp / crm-rector
Rector rules for REMP/Crm
Installs: 2 598
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 6
Forks: 1
Open Issues: 0
Type:rector-extension
Requires
- php: ^8.1
- rector/rector: ^2.0
README
This repository contains Rector rules for upgrade of custom modules used with REMP CRM.
How to use
1. Install package
composer require --dev remp/crm-rector
Note: Composer will ask if you trust plugin rector/extension-installer
. This plugin installs CRM rules into Rector package.
2. Create rector.php
:
Run command:
vendor/bin/rector init
3. Update rector.php
Fill custom paths & options & sets/rules you want to run.
E.g. to update to CRM 1.0 it could look like this:
<?php declare(strict_types=1); use Crm\Utils\Rector\Set\CrmSetList; use Rector\Config\RectorConfig; use Rector\Core\Configuration\Option; return static function (RectorConfig $rectorConfig): void { $parameters = $rectorConfig->parameters(); // paths to refactor $rectorConfig->paths([ __DIR__ . '/app/custom-modules', // path to custom modules ]); // set with CRM v3 and CRM v4 changes; check README for details $rectorConfig->sets([ CrmSetList::CRM_4, ]); // run single rule if you don't want to run whole set // $rectorConfig->rule(\Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector::class); // $rectorConfig->rule(\Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector::class); // automatically import/remove namespaces after all rules are applied $rectorConfig->importNames(); $rectorConfig->importShortClasses(false); $rectorConfig->removeUnusedImports(); };
Sets and rules are listed below.
4. Run Rector:
vendor/bin/rector process --dry-run
After you reviewed planned changes, run it without --dry-run
:
vendor/bin/rector process
Use vendor/bin/rector --help
for help. Notable flags are -vvv
for verbose messages, --clear-cache
and --xdebug
if you need to debug rector rules.
Sets & rules
Upgrade CRM v3 to CRM v4
Set
Use set CrmSetList::CRM_4
:
$rectorConfig->sets([\Crm\Utils\Rector\Set\CrmSetList::CRM_4]); // removes import of Crm\ApiModule\Models\Params\InputParam $rectorConfig->removeUnusedImports(); // imports new *InputParam classes $rectorConfig->importNames();
or individual subsets / rules.
Subsets
Replace deprecated BaseWidget
and WidgetManager
This set (CrmSetList::CRM_4_LAZY_WIDGET_MANAGER
) replaces deprecated classes BaseWidget
and WidgetManager
with BaseLazyWidget
and LazyWidgetManager
. They were deprecated since
version 2.1.0,
commit remp/crm-application-module@43d9c19f37
Replace PaymentsRepository
and RecurrentPaymentsRepository
constants with enums
This set (CrmSetList::CRM_4_ENUMS
) handles renames of few enums where class name didn't contain context:
Crm\PaymentsModule\Models\ParsedMailLog\StateEnum
renamed toParsedMailLogStateEnum
,Crm\PaymentsModule\Models\RecurrentPayment\StateEnum
renamed toRecurrentPaymentStateEnum
,Crm\UsersModule\Models\AddressChangeRequest\StatusEnum
renamed toAddressChangeRequestStatusEnum
.
And replaces all deprecated constants with enums:
PaymentsRepository
constants replaced byPaymentStatusEnum
enums,RecurrentPaymentsRepository
constants replaced byRecurrentPaymentStateEnum
enums,ParsedMailLogsRepository
constants replaced byParsedMailLogStateEnum
enums,AddressChangeRequestsRepository
constants replaced byAddressChangeRequestStatusEnum
enums.
Rules
Transform Crm\ApiModule\Models\Params\InputParam
to specific *InputParam
objects
This rule (\Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector
) changes \Crm\ApiModule\Models\Params\InputParam
to specific InputParam
object from tomaj/nette-api library.
See what will be changed in getRuleDefinition()
method in \Crm\Utils\Rector\UpgradeToCrm4\InputParamChangeRector
Remove calls of deprecated methods from ParamsProcessor
This rule (\Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector
) will remove useless calls of ParamsProcessor
. Some of these methods were removed (hasError()
). And getErrors()
or getValues()
(loading API parameters from ParamsProcessor
) are not needed anymore. API runner handles errors before loading handler and provides validated parameters to handle()
method.
WARNING: This Rector rule does crude work. You still need to go through all changes and fix your API handlers (if you worked or need to work with errors).
If you use
ApiParamsValidatorInterface
, do not run this Rector rule. It doesn't understand this context.
See what will be changed in getRuleDefinition()
method in \Crm\Utils\Rector\UpgradeToCrm4\RemoveParamsProcessorRector
Transform Nette annotations to attributes
Set:
$rectorConfig->sets([\Crm\Utils\Rector\Set\CrmSetList::NETTE_ANNOTATIONS_TO_ATTRIBUTES]);
Changes:
/** @var @inject */ public Crm\UsersModule\Repositories\UsersRepository $usersRepository;
to:
#[\Nette\DI\Attributes\Inject] public Crm\UsersModule\Repositories\UsersRepository $usersRepository;
Fixes also persistent
and crossOrigin
.
Transform to lazy event listeners
Individual rules
\Crm\Utils\Rector\TransformToLazyEventListeners\TransformToLazyEventListeners
- Changes register events method to new lazy variant and removes
$this->getInstance()
call from all event registrations.
- Changes register events method to new lazy variant and removes
Upgrade CRM v2.* -> CRM v3.0
-
Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_3_0_PSR4
- contains namespace renames after class names / namespaces were changed to follow PSR4 standard.Usage:
$rectorConfig->sets([ CrmSetList::CRM_3_0_PSR4, ]);
[ARCHIVED] Upgrade CRM v0.38 -> CRM v1.0
ℹ️ We are not maintaining this set anymore. Set & rules were removed. Last release with working rules is https://github.com/remp2020/crm-rector/releases/tag/1.2.0.
Check also the CRM 1.0 migration guide.
Sets
- Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_1_0
contains CRM changes and Nette rules (3.0, 3.1). - Set:
Crm\Utils\Rector\Set\CrmSetList::CRM_1_0_WITHOUT_NETTE
contains only CRM changes.- You can call Nette sets from your
rector.php
later.
- You can call Nette sets from your
- Set:
Crm\Utils\Rector\Set\CrmSetList::NETTE_ANNOTATIONS_TO_ATTRIBUTES
contains transformation of PHPdoc-based annotations to PHP 8.0 attributes (available since Nette 3.0+).
Individual rules
\Crm\Utils\Rector\UpgradeToCrm1\ApiHandlerParametersRector
- Changes parameters of Api handlers which implement interface
Crm\ApiModule\Api\ApiHandlerInterface
to CRM v1.0.
- Changes parameters of Api handlers which implement interface
\Crm\Utils\Rector\UpgradeToCrm1\ApiHandlerJsonResponseRector
- Changes all instances of
Crm\ApiModule\Api\JsonResponse
toTomaj\NetteApi\Response\JsonApiResponse
.
- Changes all instances of
Note: Both these rules are part of sets CRM_1_0
and CRM_1_0_WITHOUT_NETTE
. These are created as individual rules because Rector's general rules were not sufficient. We recommend running whole set.