|
10 | 10 | use PhpParser\Node\Stmt\TraitUse; |
11 | 11 | use PHPStan\Reflection\ClassReflection; |
12 | 12 | use PHPStan\Type\ObjectType; |
| 13 | +use Rector\Contract\Rector\ConfigurableRectorInterface; |
13 | 14 | use Rector\Rector\AbstractRector; |
14 | 15 | use Rector\Reflection\ReflectionResolver; |
15 | 16 | use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; |
|
20 | 21 | * |
21 | 22 | * @see \RectorLaravel\Tests\Rector\Class_\RemoveModelPropertyFromFactoriesRector\RemoveModelPropertyFromFactoriesRectorTest |
22 | 23 | */ |
23 | | -final class AddHasFactoryToModelsRector extends AbstractRector |
| 24 | +final class AddHasFactoryToModelsRector extends AbstractRector implements ConfigurableRectorInterface |
24 | 25 | { |
25 | 26 | private const string TRAIT_NAME = 'Illuminate\Database\Eloquent\Factories\HasFactory'; |
26 | 27 |
|
| 28 | + /** |
| 29 | + * @var mixed[] |
| 30 | + */ |
| 31 | + private array $allowList = []; |
| 32 | + |
27 | 33 | public function __construct( |
28 | 34 | private readonly ReflectionResolver $reflectionResolver, |
29 | 35 | ) {} |
@@ -53,6 +59,11 @@ class User extends Model |
53 | 59 | ]); |
54 | 60 | } |
55 | 61 |
|
| 62 | + public function configure(array $configuration): void |
| 63 | + { |
| 64 | + $this->allowList = $configuration; |
| 65 | + } |
| 66 | + |
56 | 67 | /** |
57 | 68 | * @return array<class-string<Node>> |
58 | 69 | */ |
@@ -83,6 +94,10 @@ private function shouldSkipClass(Class_ $class): bool |
83 | 94 | return null; |
84 | 95 | } |
85 | 96 |
|
| 97 | + if ($this->allowList !== [] && ! $this->isNames($class, $this->allowList)) { |
| 98 | + return false; |
| 99 | + } |
| 100 | + |
86 | 101 | $classReflection = $this->reflectionResolver->resolveClassReflection($class); |
87 | 102 | if (! $classReflection instanceof ClassReflection) { |
88 | 103 | return false; |
|
0 commit comments