Skip to content

Commit 5880ed9

Browse files
samsonasikcvergne
andauthored
[Symfony73] Remove extends AbstractExtension after apply change on GetFunctionsToAsTwigFunctionAttributeRector (#846)
* Update Fixtures for GetFunctionsToAsTwigFunctionAttributeRector * Closes #823 Fixes rectorphp/rector#9361 * skip whole * fix * fix * fix --------- Co-authored-by: Christophe VERGNE <[email protected]>
1 parent dfc8e0d commit 5880ed9

File tree

5 files changed

+35
-5
lines changed

5 files changed

+35
-5
lines changed

rules-tests/Symfony73/Rector/Class_/GetFiltersToAsTwigFilterAttributeRector/Fixture/some_get_filters.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\GetFiltersToAsTwigFilterA
2727

2828
use Twig\Extension\AbstractExtension;
2929

30-
final class SomeGetFilter extends AbstractExtension
30+
final class SomeGetFilter
3131
{
3232
#[\Twig\Attribute\AsTwigFilter('some_filter')]
3333
public function someFilter($value)

rules-tests/Symfony73/Rector/Class_/GetFiltersToAsTwigFilterAttributeRector/Fixture/with_first_class_callable_filter.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\GetFiltersToAsTwigFilterA
3939

4040
use Twig\Extension\AbstractExtension;
4141

42-
final class WithFirstClassCallableFilter extends AbstractExtension
42+
final class WithFirstClassCallableFilter
4343
{
4444
#[\Twig\Attribute\AsTwigFilter('some_filter')]
4545
public function someFilter($value)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\GetFunctionsToAsTwigFunctionAttributeRector\Fixture;
4+
5+
use Twig\Extension\AbstractExtension;
6+
7+
final class SkipDifferentClass extends AbstractExtension
8+
{
9+
public function getFunctions(): array
10+
{
11+
return [
12+
new \Twig\TwigFunction('some_function', [DifferentClass::class, 'someFunction']),
13+
new \Twig\TwigFunction('some_function', $this->someFunction(...)),
14+
];
15+
}
16+
17+
public function someFunction($value)
18+
{
19+
return $value;
20+
}
21+
}
22+
23+
?>

rules-tests/Symfony73/Rector/Class_/GetFunctionsToAsTwigFunctionAttributeRector/Fixture/some_get_functions.php.inc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ namespace Rector\Symfony\Tests\Symfony73\Rector\Class_\GetFunctionsToAsTwigFunct
3939

4040
use Twig\Extension\AbstractExtension;
4141

42-
final class SomeGetFunctions extends AbstractExtension
42+
final class SomeGetFunctions
4343
{
4444
#[\Twig\Attribute\AsTwigFunction('some_function')]
4545
public function someFunction($value)

rules/Symfony73/GetMethodToAsTwigAttributeTransformer.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
use PHPStan\Reflection\ReflectionProvider;
2020
use PHPStan\Type\ObjectType;
2121
use Rector\Privatization\NodeManipulator\VisibilityManipulator;
22+
use Rector\Symfony\Enum\TwigClass;
2223
use Rector\Symfony\Symfony73\NodeAnalyzer\LocalArrayMethodCallableMatcher;
2324
use Rector\Symfony\Symfony73\NodeRemover\ReturnEmptyArrayMethodRemover;
2425

@@ -52,8 +53,9 @@ public function transformClassGetMethodToAttributeMarker(
5253
return false;
5354
}
5455

55-
$hasChanged = false;
56+
$originalMethod = clone $getMethod;
5657

58+
$hasChanged = false;
5759
foreach ((array) $getMethod->stmts as $stmt) {
5860
// handle return array simple case
5961
if (! $stmt instanceof Return_) {
@@ -89,7 +91,8 @@ public function transformClassGetMethodToAttributeMarker(
8991
if ($this->isLocalCallable($secondArg->value)) {
9092
$localMethodName = $this->localArrayMethodCallableMatcher->match($secondArg->value, $objectType);
9193
if (! is_string($localMethodName)) {
92-
continue;
94+
$getMethod = $originalMethod;
95+
return false;
9396
}
9497

9598
$localMethod = $class->getMethod($localMethodName);
@@ -110,6 +113,10 @@ public function transformClassGetMethodToAttributeMarker(
110113
$this->returnEmptyArrayMethodRemover->removeClassMethodIfArrayEmpty($class, $returnArray, $methodName);
111114
}
112115

116+
if ($hasChanged && $class->extends instanceof FullyQualified && $class->extends->toString() === TwigClass::TWIG_EXTENSION) {
117+
$class->extends = null;
118+
}
119+
113120
return $hasChanged;
114121
}
115122

0 commit comments

Comments
 (0)