From 37670e2a5ac10b90739e07eb1441ee6dabbc3253 Mon Sep 17 00:00:00 2001 From: bjorn Date: Thu, 18 Apr 2024 08:56:46 +0200 Subject: [PATCH] New rector: Rector for _drupal_flush_css_js through new VersionedFunctionToServiceRector --- config/drupal-10/drupal-10.2-deprecations.php | 7 ++ .../VersionedFunctionToServiceRector.php | 84 +++++++++++++++++++ ...ersionedFunctionToServiceConfiguration.php | 55 ++++++++++++ .../VersionedFunctionToServiceRectorTest.php | 35 ++++++++ .../config/configured_rule.php | 14 ++++ .../fixture/fixture.php.inc | 13 +++ 6 files changed, 208 insertions(+) create mode 100644 src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector.php create mode 100644 src/Drupal10/Rector/ValueObject/VersionedFunctionToServiceConfiguration.php create mode 100644 tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/VersionedFunctionToServiceRectorTest.php create mode 100644 tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/config/configured_rule.php create mode 100644 tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/fixture/fixture.php.inc diff --git a/config/drupal-10/drupal-10.2-deprecations.php b/config/drupal-10/drupal-10.2-deprecations.php index 869a4838..6e343b9a 100644 --- a/config/drupal-10/drupal-10.2-deprecations.php +++ b/config/drupal-10/drupal-10.2-deprecations.php @@ -2,6 +2,8 @@ declare(strict_types=1); +use DrupalRector\Drupal10\Rector\Deprecation\VersionedFunctionToServiceRector; +use DrupalRector\Drupal10\Rector\ValueObject\VersionedFunctionToServiceConfiguration; use DrupalRector\Rector\Deprecation\FunctionToStaticRector; use DrupalRector\Rector\Deprecation\MethodToMethodWithCheckRector; use DrupalRector\Rector\ValueObject\FunctionToStaticConfiguration; @@ -24,4 +26,9 @@ new MethodToMethodWithCheckConfiguration('Drupal\system\Plugin\ImageToolkit\GDToolkit', 'getResource', 'getImage'), new MethodToMethodWithCheckConfiguration('Drupal\system\Plugin\ImageToolkit\GDToolkit', 'setResource', 'setImage'), ]); + + // https://www.drupal.org/node/3358337 + $rectorConfig->ruleWithConfiguration(VersionedFunctionToServiceRector::class, [ + new VersionedFunctionToServiceConfiguration('10.2.0', '_drupal_flush_css_js', 'asset.query_string', 'reset'), + ]); }; diff --git a/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector.php b/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector.php new file mode 100644 index 00000000..4b166826 --- /dev/null +++ b/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector.php @@ -0,0 +1,84 @@ +getName($node->name) === $configuration->getDeprecatedFunctionName()) { + // This creates a service call like `\Drupal::service('file_system'). + $service = new Node\Expr\StaticCall(new Node\Name\FullyQualified('Drupal'), 'service', [new Node\Arg(new Node\Scalar\String_($configuration->getServiceName()))]); + + $method_name = new Node\Identifier($configuration->getServiceMethodName()); + + return new Node\Expr\MethodCall($service, $method_name, $node->args); + } + + return null; + } + + public function getRuleDefinition(): RuleDefinition + { + return new RuleDefinition('Fixes deprecated function to service calls, used in Drupal 8 and 9 deprecations', [ + new ConfiguredCodeSample( + <<<'CODE_BEFORE' +_drupal_flush_css_js(); +CODE_BEFORE + , + <<<'CODE_AFTER' +\Drupal::service('asset.query_string')->reset(); +CODE_AFTER + , + [ + new VersionedFunctionToServiceConfiguration('10.2.0', '_drupal_flush_css_js', 'asset.query_string', 'reset'), + ] + ), + ]); + } +} diff --git a/src/Drupal10/Rector/ValueObject/VersionedFunctionToServiceConfiguration.php b/src/Drupal10/Rector/ValueObject/VersionedFunctionToServiceConfiguration.php new file mode 100644 index 00000000..e0068162 --- /dev/null +++ b/src/Drupal10/Rector/ValueObject/VersionedFunctionToServiceConfiguration.php @@ -0,0 +1,55 @@ +deprecatedFunctionName = $deprecatedFunctionName; + $this->serviceName = $serviceName; + $this->serviceMethodName = $serviceMethodName; + $this->introducedVersion = $introducedVersion; + } + + public function getDeprecatedFunctionName(): string + { + return $this->deprecatedFunctionName; + } + + public function getServiceName(): string + { + return $this->serviceName; + } + + public function getServiceMethodName(): string + { + return $this->serviceMethodName; + } + + public function getIntroducedVersion(): string + { + return $this->introducedVersion; + } +} diff --git a/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/VersionedFunctionToServiceRectorTest.php b/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/VersionedFunctionToServiceRectorTest.php new file mode 100644 index 00000000..930edc55 --- /dev/null +++ b/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/VersionedFunctionToServiceRectorTest.php @@ -0,0 +1,35 @@ +doTestFile($filePath); + } + + /** + * @return Iterator<> + */ + public static function provideData(): \Iterator + { + return self::yieldFilesFromDirectory(__DIR__.'/fixture'); + } + + public function provideConfigFilePath(): string + { + // must be implemented + return __DIR__.'/config/configured_rule.php'; + } +} diff --git a/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/config/configured_rule.php b/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/config/configured_rule.php new file mode 100644 index 00000000..24b63efd --- /dev/null +++ b/tests/src/Drupal10/Rector/Deprecation/VersionedFunctionToServiceRector/config/configured_rule.php @@ -0,0 +1,14 @@ + +----- + \Drupal::service('asset.query_string')->reset(), fn() => _drupal_flush_css_js()); +} +?>