From 45d407301b02c5c698ee76bac7be3171fdf2fc77 Mon Sep 17 00:00:00 2001 From: Claudio Campos Date: Tue, 20 Apr 2021 13:31:47 -0400 Subject: [PATCH 1/8] Update README.md A couple of typos --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d7a07f7e..9168f873 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ https://www.palantir.net/rector ## Scope and limitations -The development of this tool is prioritized by the percieved impact of the deprecations and updates. There are many deprecations that often involve several components and for each of these there are several ways to address the deprecation. +The development of this tool is prioritized by the perceived impact of the deprecations and updates. There are many deprecations that often involve several components and for each of these there are several ways to address the deprecation. We've tried to determine impact based on: - The use of the deprecated functionality in the contributed modules on Drupal.org @@ -111,7 +111,7 @@ Fatal error: Declaration of _HumbugBox3630ef99eac4\Symfony\Component\HttpKernel\ ``` You may need to check that you are -- Running `composer install` from an environment that support Php 7.2 or greater +- Running `composer install` from an environment that supports Php 7.2 or greater - Running Drupal Rector from an environment that supports Php 7.2 or greater Sometimes people install composer dependencies from one machine (host machine) and run Drupal Rector from another (such as a Lando VM). From f581b0bd2d3542983d1533897fedb96c11497ba4 Mon Sep 17 00:00:00 2001 From: Steve Worley Date: Tue, 27 Apr 2021 19:49:51 +1000 Subject: [PATCH 2/8] Add entity view support. --- rector_examples/entity_view.php | 33 ++++++++ .../Deprecation/Base/EntityViewBase.php | 81 +++++++++++++++++++ src/Rector/Deprecation/EntityViewRector.php | 42 ++++++++++ 3 files changed, 156 insertions(+) create mode 100644 rector_examples/entity_view.php create mode 100644 src/Rector/Deprecation/Base/EntityViewBase.php create mode 100644 src/Rector/Deprecation/EntityViewRector.php diff --git a/rector_examples/entity_view.php b/rector_examples/entity_view.php new file mode 100644 index 00000000..29d5b0e2 --- /dev/null +++ b/rector_examples/entity_view.php @@ -0,0 +1,33 @@ +field_view_mode = 'test'; + + $view = entity_view($entity, $entity->field_view_mode); +} diff --git a/src/Rector/Deprecation/Base/EntityViewBase.php b/src/Rector/Deprecation/Base/EntityViewBase.php new file mode 100644 index 00000000..7cc3037d --- /dev/null +++ b/src/Rector/Deprecation/Base/EntityViewBase.php @@ -0,0 +1,81 @@ +getName($node->name) !== 'entity_view') { + return NULL; + } + + $name = new Node\Name\FullyQualified('Drupal'); + + $entity_type_method_name = new Node\Identifier('entityTypeManager'); + + $var = new Node\Expr\StaticCall($name, $entity_type_method_name); + + $getViewBuilder_method_name = new Node\Identifier('getViewBuilder'); + + $entityRef = $node->args[0]->value; + $getEntityTypeId_method_name = new Node\Identifier('getEntityTypeId'); + + $entityRef_type_id = new Node\Expr\MethodCall($entityRef, $getEntityTypeId_method_name); + + $view_builder = new Node\Expr\MethodCall($var, $getViewBuilder_method_name, [$entityRef_type_id]); + + $view_method_name = new Node\Identifier('view'); + + $view_args = [ + $node->args[0]->value, + $node->args[1]->value, + ]; + + if (isset($node->args[2])) { + $view_args[] = $node->args[2]->value; + } + + if (isset($node->args[3])) { + $view_args[] = $node->args[3]->value; + } + + $view = new Node\Expr\MethodCall($view_builder, $view_method_name, $view_args); + + return $view; + + } +} diff --git a/src/Rector/Deprecation/EntityViewRector.php b/src/Rector/Deprecation/EntityViewRector.php new file mode 100644 index 00000000..3852ac77 --- /dev/null +++ b/src/Rector/Deprecation/EntityViewRector.php @@ -0,0 +1,42 @@ +getViewBuilder($entity + ->getEntityTypeId())->view($entity, 'default'); +CODE_AFTER + ) + ]); + } + +} From 53088bec7a271a46ddc83195ca19aa52bcb2fc9b Mon Sep 17 00:00:00 2001 From: Steve Worley Date: Wed, 28 Apr 2021 12:20:19 +1000 Subject: [PATCH 3/8] Remove support for cache clear. --- src/Rector/Deprecation/Base/EntityViewBase.php | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/Rector/Deprecation/Base/EntityViewBase.php b/src/Rector/Deprecation/Base/EntityViewBase.php index 7cc3037d..08c054e6 100644 --- a/src/Rector/Deprecation/Base/EntityViewBase.php +++ b/src/Rector/Deprecation/Base/EntityViewBase.php @@ -69,13 +69,8 @@ public function refactor(Node $node): ?Node $view_args[] = $node->args[2]->value; } - if (isset($node->args[3])) { - $view_args[] = $node->args[3]->value; - } - $view = new Node\Expr\MethodCall($view_builder, $view_method_name, $view_args); return $view; - } } From 9c73eab87779c3a9de82e37b59cea1bd2879da32 Mon Sep 17 00:00:00 2001 From: Steve Worley Date: Tue, 4 May 2021 14:30:34 +1000 Subject: [PATCH 4/8] Apply review updates. - Add to deprecation list - Add to derecation index - Add transformation example - Correct spelling - Remove base class --- deprecation-index.yml | 5 ++ rector_examples/entity_view.php | 2 +- rector_examples_updated/entiy_view.php | 30 ++++++++ .../Deprecation/Base/EntityViewBase.php | 76 ------------------- src/Rector/Deprecation/EntityViewRector.php | 65 ++++++++++++++-- 5 files changed, 95 insertions(+), 83 deletions(-) create mode 100644 rector_examples_updated/entiy_view.php delete mode 100644 src/Rector/Deprecation/Base/EntityViewBase.php diff --git a/deprecation-index.yml b/deprecation-index.yml index aa01ec2c..da3c1195 100644 --- a/deprecation-index.yml +++ b/deprecation-index.yml @@ -192,6 +192,11 @@ PHPStan: 'Call to deprecated function entity_load(). Deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use the entity type storage''s load() method.' Examples: - entity_load.php +'entity_view()': + Rector: EntityViewRector.php + PHPStan: 'Use the entity view builder''s view() method for creating a render array' + Examples: + - entity_view.php 'node_load()': Rector: NodeLoadRector.php PHPStan: 'Call to deprecated function node_load(). Deprecated in drupal:8.0.0 and is removed from drupal:9.0.0. Use Drupal\node\Entity\Node::load().' diff --git a/rector_examples/entity_view.php b/rector_examples/entity_view.php index 29d5b0e2..13a664ed 100644 --- a/rector_examples/entity_view.php +++ b/rector_examples/entity_view.php @@ -15,7 +15,7 @@ function simple_example() { function lagncode_example() { $entity = new stdClass(); $langcode = 'de'; - $veiw = entity_view($entity, 'default', $langcode); + $view = entity_view($entity, 'default', $langcode); } function reset_cache_example() { diff --git a/rector_examples_updated/entiy_view.php b/rector_examples_updated/entiy_view.php new file mode 100644 index 00000000..ed8ddf32 --- /dev/null +++ b/rector_examples_updated/entiy_view.php @@ -0,0 +1,30 @@ +getViewBuilder($entity->getEntityTypeId())->view($entity, 'default'); +} + +/** + * An example using all of the arguments. + */ +function lagncode_example() { + $entity = new stdClass(); + $langcode = 'de'; + $view = \Drupal::entityTypeManager()->getViewBuilder($entity->getEntityTypeId())->view($entity, 'default', $langcode); +} + +/** + * An example using all of the arguments as variables. + */ +function arguments_member_values() { + $entity = new stdClass(); + $view = \Drupal::entityTypeManager()->getViewBuilder($entity->getEntityTypeId())->view($entity, $entity->field_view_mode); +} diff --git a/src/Rector/Deprecation/Base/EntityViewBase.php b/src/Rector/Deprecation/Base/EntityViewBase.php deleted file mode 100644 index 08c054e6..00000000 --- a/src/Rector/Deprecation/Base/EntityViewBase.php +++ /dev/null @@ -1,76 +0,0 @@ -getName($node->name) !== 'entity_view') { - return NULL; - } - - $name = new Node\Name\FullyQualified('Drupal'); - - $entity_type_method_name = new Node\Identifier('entityTypeManager'); - - $var = new Node\Expr\StaticCall($name, $entity_type_method_name); - - $getViewBuilder_method_name = new Node\Identifier('getViewBuilder'); - - $entityRef = $node->args[0]->value; - $getEntityTypeId_method_name = new Node\Identifier('getEntityTypeId'); - - $entityRef_type_id = new Node\Expr\MethodCall($entityRef, $getEntityTypeId_method_name); - - $view_builder = new Node\Expr\MethodCall($var, $getViewBuilder_method_name, [$entityRef_type_id]); - - $view_method_name = new Node\Identifier('view'); - - $view_args = [ - $node->args[0]->value, - $node->args[1]->value, - ]; - - if (isset($node->args[2])) { - $view_args[] = $node->args[2]->value; - } - - $view = new Node\Expr\MethodCall($view_builder, $view_method_name, $view_args); - - return $view; - } -} diff --git a/src/Rector/Deprecation/EntityViewRector.php b/src/Rector/Deprecation/EntityViewRector.php index 3852ac77..735905a3 100644 --- a/src/Rector/Deprecation/EntityViewRector.php +++ b/src/Rector/Deprecation/EntityViewRector.php @@ -2,24 +2,37 @@ namespace DrupalRector\Rector\Deprecation; -use DrupalRector\Rector\Deprecation\Base\EntityViewBase; use Rector\Core\RectorDefinition\CodeSample; use Rector\Core\RectorDefinition\RectorDefinition; +use Rector\Core\Rector\AbstractRector; +use PhpParser\Node; + /** - * Replaced deprecated entity_load() calls. + * Replaced deprecated entity_view() calls. * - * See https://www.drupal.org/node/2266845 for change record. + * See https://www.drupal.org/node/3033656 for change record. * * What is covered: - * - See EntityLoadBase.php + * - Static replacement + * - The reset parameter is excluded. * * Improvement opportunities - * - See EntityLoadBase.php + * - Include support for cache rest parameter. */ -final class EntityViewRector extends EntityViewBase +final class EntityViewRector extends AbstractRector { + /** + * @inheritdoc + */ + public function getNodeTypes(): array + { + return [ + Node\Expr\FuncCall::class, + ]; + } + /** * @inheritdoc */ @@ -39,4 +52,44 @@ public function getDefinition(): RectorDefinition ]); } + /** + * @inheritdoc + */ + public function refactor(Node $node): ?Node + { + if ($this->getName($node->name) !== 'entity_view') { + return NULL; + } + + $name = new Node\Name\FullyQualified('Drupal'); + + $entityTypManager = new Node\Identifier('entityTypeManager'); + + $var = new Node\Expr\StaticCall($name, $entityTypManager); + + $getViewBuilder_method_name = new Node\Identifier('getViewBuilder'); + + $entity_reference = $node->args[0]->value; + $getEntityTypeId_method_name = new Node\Identifier('getEntityTypeId'); + + $entityRef_type_id = new Node\Expr\MethodCall($entity_reference, $getEntityTypeId_method_name); + + $view_builder = new Node\Expr\MethodCall($var, $getViewBuilder_method_name, [$entityRef_type_id]); + + $view_method_name = new Node\Identifier('view'); + + $view_args = [ + $node->args[0]->value, + $node->args[1]->value, + ]; + + if (isset($node->args[2])) { + $view_args[] = $node->args[2]->value; + } + + $view = new Node\Expr\MethodCall($view_builder, $view_method_name, $view_args); + + return $view; + } + } From 28edc75e092c38bbe4f803d3e0538b3f01e4507b Mon Sep 17 00:00:00 2001 From: Steve Worley Date: Tue, 4 May 2021 17:44:07 +1000 Subject: [PATCH 5/8] Update for rector 0.10. --- config/drupal-8/drupal-8.0-deprecations.php | 3 +++ src/Rector/Deprecation/EntityViewRector.php | 8 ++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/config/drupal-8/drupal-8.0-deprecations.php b/config/drupal-8/drupal-8.0-deprecations.php index a1dcf0de..f02d31b9 100644 --- a/config/drupal-8/drupal-8.0-deprecations.php +++ b/config/drupal-8/drupal-8.0-deprecations.php @@ -18,6 +18,7 @@ use DrupalRector\Rector\Deprecation\EntityInterfaceUrlInfoRector; use DrupalRector\Rector\Deprecation\EntityLoadRector; use DrupalRector\Rector\Deprecation\EntityManagerRector; +use DrupalRector\Rector\Deprecation\EntityViewRector; use DrupalRector\Rector\Deprecation\FileLoadRector; use DrupalRector\Rector\Deprecation\FormatDateRector; use DrupalRector\Rector\Deprecation\LinkGeneratorTraitLRector; @@ -59,6 +60,8 @@ $services->set(EntityLoadRector::class); + $services->set(EntityViewRector::class); + $services->set(EntityManagerRector::class); $services->set(FormatDateRector::class); diff --git a/src/Rector/Deprecation/EntityViewRector.php b/src/Rector/Deprecation/EntityViewRector.php index 735905a3..4cab2d35 100644 --- a/src/Rector/Deprecation/EntityViewRector.php +++ b/src/Rector/Deprecation/EntityViewRector.php @@ -2,8 +2,8 @@ namespace DrupalRector\Rector\Deprecation; -use Rector\Core\RectorDefinition\CodeSample; -use Rector\Core\RectorDefinition\RectorDefinition; +use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; +use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; use Rector\Core\Rector\AbstractRector; use PhpParser\Node; @@ -36,9 +36,9 @@ public function getNodeTypes(): array /** * @inheritdoc */ - public function getDefinition(): RectorDefinition + public function getRuleDefinition(): RuleDefinition { - return new RectorDefinition('Fixes deprecated entity_view() use',[ + return new RuleDefinition('Fixes deprecated entity_view() use',[ new CodeSample( <<<'CODE_BEFORE' $rendered = entity_view($entity, 'default'); From 6d65b237127a05bdeb17f62a39dc7c04c675012d Mon Sep 17 00:00:00 2001 From: Steve Worley Date: Wed, 5 May 2021 12:52:22 +1000 Subject: [PATCH 6/8] Fix tests. --- rector_examples/entity_view.php | 5 ++++- rector_examples_updated/entiy_view.php | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/rector_examples/entity_view.php b/rector_examples/entity_view.php index 13a664ed..b128a6f3 100644 --- a/rector_examples/entity_view.php +++ b/rector_examples/entity_view.php @@ -1,7 +1,7 @@ getViewBuilder($entity->getEntityTypeId())->view($entity, 'default', $langcode); } +function reset_cache_example() { + // Not supported. +} + + /** * An example using all of the arguments as variables. */ function arguments_member_values() { $entity = new stdClass(); + $entity->field_view_mode = 'test'; + $view = \Drupal::entityTypeManager()->getViewBuilder($entity->getEntityTypeId())->view($entity, $entity->field_view_mode); } From f44f3964af798be3bcea6c5d0919c9020473e949 Mon Sep 17 00:00:00 2001 From: Yusuf Hasan Miyan Date: Wed, 5 May 2021 12:58:34 +1000 Subject: [PATCH 7/8] Rename entiy_view.php to entity_view.php --- rector_examples_updated/{entiy_view.php => entity_view.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rector_examples_updated/{entiy_view.php => entity_view.php} (100%) diff --git a/rector_examples_updated/entiy_view.php b/rector_examples_updated/entity_view.php similarity index 100% rename from rector_examples_updated/entiy_view.php rename to rector_examples_updated/entity_view.php From a659782945d97a3e80243e783d7c4fbb0c94bdd3 Mon Sep 17 00:00:00 2001 From: "Yusuf A. Hasan Miyan" Date: Thu, 6 May 2021 10:34:10 +1000 Subject: [PATCH 8/8] Updated comment to match. --- rector_examples_updated/entity_view.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/rector_examples_updated/entity_view.php b/rector_examples_updated/entity_view.php index 64da7964..7358e48a 100644 --- a/rector_examples_updated/entity_view.php +++ b/rector_examples_updated/entity_view.php @@ -25,9 +25,8 @@ function reset_cache_example() { // Not supported. } - /** - * An example using all of the arguments as variables. + * An example using arguments as member values. */ function arguments_member_values() { $entity = new stdClass();