From e698133cad1a85f2384a6cf450d66c54df1876a2 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 20 Sep 2023 14:52:43 +0200 Subject: [PATCH] [DX] Make ValueResolver explicitly required in Rector rules constructor if needed (#5053) --- .../Foreach_/UnusedForeachValueToArrayKeysRector.php | 4 +++- .../Rector/If_/SimplifyIfElseToTernaryRector.php | 4 +++- .../ClassMethod/DataProviderArrayItemsNewlinedRector.php | 4 +++- .../ClassMethod/FuncGetArgsToVariadicParamRector.php | 6 ++++++ .../Class_/AddArrayDefaultToArrayPropertyRector.php | 4 +++- rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php | 2 ++ .../Rector/Assign/RemoveUnusedVariableAssignRector.php | 4 +++- .../RemoveUnusedPrivateMethodParameterRector.php | 2 ++ .../ClassMethod/RemoveUnusedPrivateMethodRector.php | 4 +++- .../ClassMethod/RemoveUnusedPromotedPropertyRector.php | 2 ++ .../DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php | 4 +++- .../Rector/Foreach_/RemoveUnusedForeachKeyRector.php | 6 ++++++ .../Rector/If_/RemoveAlwaysTrueIfConditionRector.php | 4 +++- .../Rector/Node/RemoveNonExistingVarAnnotationRector.php | 2 ++ .../Rector/Return_/PreparedValueToEarlyReturnRector.php | 4 +++- .../ClassMethod/RenameVariableToMatchNewTypeRector.php | 4 +++- ...enameForeachValueVariableToMatchExprVariableRector.php | 4 +++- rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php | 4 +++- rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php | 4 +++- .../Rector/Catch_/RemoveUnusedVariableInCatchRector.php | 4 +++- .../AddParamBasedOnParentClassMethodRector.php | 2 ++ rules/Php80/Rector/Class_/StringableForToStringRector.php | 4 +++- rules/Php81/Rector/Property/ReadOnlyPropertyRector.php | 4 +++- .../AddParamTypeBasedOnPHPUnitDataProviderRector.php | 4 +++- .../BoolReturnTypeFromStrictScalarReturnsRector.php | 2 ++ .../ClassMethod/ParamTypeByMethodCallTypeRector.php | 4 +++- .../ClassMethod/ParamTypeByParentCallTypeRector.php | 4 +++- .../Rector/ClassMethod/ReturnNeverTypeRector.php | 2 ++ .../Rector/ClassMethod/ReturnTypeFromReturnNewRector.php | 4 +++- .../ClassMethod/ReturnTypeFromStrictNewArrayRector.php | 4 +++- .../ReturnTypeFromStrictTypedPropertyRector.php | 4 +++- .../Rector/Class_/ReturnTypeFromStrictTernaryRector.php | 4 +++- .../Param/ParamTypeFromStrictTypedPropertyRector.php | 4 +++- src/DependencyInjection/LazyContainerFactory.php | 1 + src/Rector/AbstractRector.php | 6 +++--- utils/Rector/MoveAbstractRectorToChildrenRector.php | 8 ++++---- 36 files changed, 106 insertions(+), 31 deletions(-) diff --git a/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php b/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php index 1b33911d666..e96964655f7 100644 --- a/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php +++ b/rules/CodeQuality/Rector/Foreach_/UnusedForeachValueToArrayKeysRector.php @@ -11,6 +11,7 @@ use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\Foreach_; use PHPStan\Type\ObjectType; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\DeadCode\NodeAnalyzer\ExprUsedInNodeAnalyzer; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -22,7 +23,8 @@ final class UnusedForeachValueToArrayKeysRector extends AbstractRector { public function __construct( - private readonly ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer + private readonly ExprUsedInNodeAnalyzer $exprUsedInNodeAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/CodeQuality/Rector/If_/SimplifyIfElseToTernaryRector.php b/rules/CodeQuality/Rector/If_/SimplifyIfElseToTernaryRector.php index aa5f124ea62..5e667679e1a 100644 --- a/rules/CodeQuality/Rector/If_/SimplifyIfElseToTernaryRector.php +++ b/rules/CodeQuality/Rector/If_/SimplifyIfElseToTernaryRector.php @@ -12,6 +12,7 @@ use PhpParser\Node\Stmt\Else_; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\If_; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Printer\BetterStandardPrinter; use Rector\Core\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -28,7 +29,8 @@ final class SimplifyIfElseToTernaryRector extends AbstractRector private const LINE_LENGTH_LIMIT = 120; public function __construct( - private readonly BetterStandardPrinter $betterStandardPrinter + private readonly BetterStandardPrinter $betterStandardPrinter, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/CodingStyle/Rector/ClassMethod/DataProviderArrayItemsNewlinedRector.php b/rules/CodingStyle/Rector/ClassMethod/DataProviderArrayItemsNewlinedRector.php index 5008387f8f1..d32ee35d2f2 100644 --- a/rules/CodingStyle/Rector/ClassMethod/DataProviderArrayItemsNewlinedRector.php +++ b/rules/CodingStyle/Rector/ClassMethod/DataProviderArrayItemsNewlinedRector.php @@ -8,6 +8,7 @@ use PhpParser\Node\Expr\Array_; use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; @@ -20,7 +21,8 @@ final class DataProviderArrayItemsNewlinedRector extends AbstractRector { public function __construct( - private readonly TestsNodeAnalyzer $testsNodeAnalyzer + private readonly TestsNodeAnalyzer $testsNodeAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php b/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php index e9ae7d16e5e..b5629b46006 100644 --- a/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php +++ b/rules/CodingStyle/Rector/ClassMethod/FuncGetArgsToVariadicParamRector.php @@ -14,6 +14,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Expression; use PhpParser\Node\Stmt\Function_; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -27,6 +28,11 @@ */ final class FuncGetArgsToVariadicParamRector extends AbstractRector implements MinPhpVersionInterface { + public function __construct( + private readonly BetterNodeFinder $betterNodeFinder + ) { + } + public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Refactor func_get_args() in to a variadic param', [ diff --git a/rules/CodingStyle/Rector/Class_/AddArrayDefaultToArrayPropertyRector.php b/rules/CodingStyle/Rector/Class_/AddArrayDefaultToArrayPropertyRector.php index 19dcaa90617..c257789da18 100644 --- a/rules/CodingStyle/Rector/Class_/AddArrayDefaultToArrayPropertyRector.php +++ b/rules/CodingStyle/Rector/Class_/AddArrayDefaultToArrayPropertyRector.php @@ -19,6 +19,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\CodingStyle\TypeAnalyzer\IterableTypeAnalyzer; use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\Core\Rector\AbstractRector; use Rector\Privatization\NodeManipulator\VisibilityManipulator; @@ -38,7 +39,8 @@ public function __construct( private readonly VisibilityManipulator $visibilityManipulator, private readonly ConstructorAssignDetector $constructorAssignDetector, private readonly PhpDocInfoFactory $phpDocInfoFactory, - private readonly ValueResolver $valueResolver + private readonly ValueResolver $valueResolver, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php index d8d686bd034..baaf30bc674 100644 --- a/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveDoubleAssignRector.php @@ -17,6 +17,7 @@ use PhpParser\Node\Stmt\If_; use PhpParser\Node\Stmt\Namespace_; use PHPStan\Analyser\Scope; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\CustomNode\FileWithoutNamespace; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; @@ -30,6 +31,7 @@ final class RemoveDoubleAssignRector extends AbstractScopeAwareRector { public function __construct( private readonly SideEffectNodeDetector $sideEffectNodeDetector, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php index a15d13bcca6..3b3f34bd857 100644 --- a/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php +++ b/rules/DeadCode/Rector/Assign/RemoveUnusedVariableAssignRector.php @@ -18,6 +18,7 @@ use PHPStan\Analyser\Scope; use Rector\Core\NodeAnalyzer\VariableAnalyzer; use Rector\Core\Php\ReservedKeywordAnalyzer; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\DeadCode\SideEffect\SideEffectNodeDetector; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -32,7 +33,8 @@ final class RemoveUnusedVariableAssignRector extends AbstractScopeAwareRector public function __construct( private readonly ReservedKeywordAnalyzer $reservedKeywordAnalyzer, private readonly SideEffectNodeDetector $sideEffectNodeDetector, - private readonly VariableAnalyzer $variableAnalyzer + private readonly VariableAnalyzer $variableAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php index 63f36387e19..f5a887816c8 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodParameterRector.php @@ -14,6 +14,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTagRemover; use Rector\Comments\NodeDocBlock\DocBlockUpdater; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\DeadCode\NodeCollector\UnusedParameterResolver; use Rector\DeadCode\NodeManipulator\VariadicFunctionLikeDetector; @@ -31,6 +32,7 @@ public function __construct( private readonly PhpDocTagRemover $phpDocTagRemover, private readonly DocBlockUpdater $docBlockUpdater, private readonly PhpDocInfoFactory $phpDocInfoFactory, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php index 79afd6f291c..e52bd75b89a 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPrivateMethodRector.php @@ -11,6 +11,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\ValueObject\MethodName; @@ -25,7 +26,8 @@ final class RemoveUnusedPrivateMethodRector extends AbstractScopeAwareRector { public function __construct( private readonly IsClassMethodUsedAnalyzer $isClassMethodUsedAnalyzer, - private readonly ReflectionResolver $reflectionResolver + private readonly ReflectionResolver $reflectionResolver, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php index b8ee9bf2862..81024ea7e49 100644 --- a/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php +++ b/rules/DeadCode/Rector/ClassMethod/RemoveUnusedPromotedPropertyRector.php @@ -10,6 +10,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\TraitUse; use PHPStan\Analyser\Scope; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\NodeFinder\PropertyFetchFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\MethodName; @@ -30,6 +31,7 @@ public function __construct( private readonly PropertyFetchFinder $propertyFetchFinder, private readonly VisibilityManipulator $visibilityManipulator, private readonly PropertyWriteonlyAnalyzer $propertyWriteonlyAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php b/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php index 588e5a8e247..c08115bcad7 100644 --- a/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php +++ b/rules/DeadCode/Rector/For_/RemoveDeadIfForeachForRector.php @@ -13,6 +13,7 @@ use PhpParser\Node\Stmt\Foreach_; use PhpParser\Node\Stmt\If_; use PhpParser\NodeTraverser; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\EarlyReturn\NodeTransformer\ConditionInverter; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -24,7 +25,8 @@ final class RemoveDeadIfForeachForRector extends AbstractRector { public function __construct( - private readonly ConditionInverter $conditionInverter + private readonly ConditionInverter $conditionInverter, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php b/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php index 3a5a7507b7f..ed2172fe2d1 100644 --- a/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php +++ b/rules/DeadCode/Rector/Foreach_/RemoveUnusedForeachKeyRector.php @@ -7,6 +7,7 @@ use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Stmt\Foreach_; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -16,6 +17,11 @@ */ final class RemoveUnusedForeachKeyRector extends AbstractRector { + public function __construct( + private readonly BetterNodeFinder $betterNodeFinder + ) { + } + public function getRuleDefinition(): RuleDefinition { return new RuleDefinition('Remove unused key in foreach', [ diff --git a/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php b/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php index 2fcce7f66fb..99112d902a4 100644 --- a/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php +++ b/rules/DeadCode/Rector/If_/RemoveAlwaysTrueIfConditionRector.php @@ -17,6 +17,7 @@ use PHPStan\Reflection\ClassReflection; use PHPStan\Type\Constant\ConstantBooleanType; use Rector\Core\NodeAnalyzer\ExprAnalyzer; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Core\Reflection\ReflectionResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -29,7 +30,8 @@ final class RemoveAlwaysTrueIfConditionRector extends AbstractRector { public function __construct( private readonly ReflectionResolver $reflectionResolver, - private readonly ExprAnalyzer $exprAnalyzer + private readonly ExprAnalyzer $exprAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php b/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php index a460a7f5c9c..013d5c33696 100644 --- a/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php +++ b/rules/DeadCode/Rector/Node/RemoveNonExistingVarAnnotationRector.php @@ -26,6 +26,7 @@ use Rector\Comments\NodeDocBlock\DocBlockUpdater; use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Core\NodeManipulator\StmtsManipulator; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\Core\Rector\AbstractRector; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -59,6 +60,7 @@ public function __construct( private readonly DocBlockUpdater $docBlockUpdater, private readonly PhpDocInfoFactory $phpDocInfoFactory, private readonly ValueResolver $valueResolver, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php b/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php index e2d468e0e16..917efacb83f 100644 --- a/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php +++ b/rules/EarlyReturn/Rector/Return_/PreparedValueToEarlyReturnRector.php @@ -14,6 +14,7 @@ use PhpParser\Node\Stmt\Return_; use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Core\NodeManipulator\IfManipulator; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\EarlyReturn\ValueObject\BareSingleAssignIf; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -25,7 +26,8 @@ final class PreparedValueToEarlyReturnRector extends AbstractRector { public function __construct( - private readonly IfManipulator $ifManipulator + private readonly IfManipulator $ifManipulator, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php b/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php index 0c1a364457f..983d94b5126 100644 --- a/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php +++ b/rules/Naming/Rector/ClassMethod/RenameVariableToMatchNewTypeRector.php @@ -9,6 +9,7 @@ use PhpParser\Node\Expr\New_; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Stmt\ClassMethod; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Naming\Guard\BreakingVariableRenameGuard; use Rector\Naming\Naming\ExpectedNameResolver; @@ -24,7 +25,8 @@ final class RenameVariableToMatchNewTypeRector extends AbstractRector public function __construct( private readonly BreakingVariableRenameGuard $breakingVariableRenameGuard, private readonly ExpectedNameResolver $expectedNameResolver, - private readonly VariableRenamer $variableRenamer + private readonly VariableRenamer $variableRenamer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php index 4d157c559b9..1a978dec038 100644 --- a/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php +++ b/rules/Naming/Rector/Foreach_/RenameForeachValueVariableToMatchExprVariableRector.php @@ -10,6 +10,7 @@ use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Core\NodeAnalyzer\PropertyFetchAnalyzer; use Rector\Core\NodeManipulator\StmtsManipulator; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Naming\ExpectedNameResolver\InflectorSingularResolver; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; @@ -23,7 +24,8 @@ final class RenameForeachValueVariableToMatchExprVariableRector extends Abstract public function __construct( private readonly InflectorSingularResolver $inflectorSingularResolver, private readonly PropertyFetchAnalyzer $propertyFetchAnalyzer, - private readonly StmtsManipulator $stmtsManipulator + private readonly StmtsManipulator $stmtsManipulator, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php b/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php index 13120ca261a..b2c613c3e2d 100644 --- a/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php +++ b/rules/Php73/Rector/FuncCall/ArrayKeyFirstLastRector.php @@ -11,6 +11,7 @@ use PhpParser\Node\Stmt\Expression; use PHPStan\Reflection\ReflectionProvider; use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -46,7 +47,8 @@ final class ArrayKeyFirstLastRector extends AbstractRector implements MinPhpVers ]; public function __construct( - private readonly ReflectionProvider $reflectionProvider + private readonly ReflectionProvider $reflectionProvider, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php b/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php index 967868d2b5f..04d1ca02034 100644 --- a/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php +++ b/rules/Php73/Rector/FuncCall/JsonThrowOnErrorRector.php @@ -12,6 +12,7 @@ use PhpParser\Node\Name; use PhpParser\Node\Scalar\LNumber; use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; @@ -29,7 +30,8 @@ final class JsonThrowOnErrorRector extends AbstractRector implements MinPhpVersi private bool $hasChanged = false; public function __construct( - private readonly ValueResolver $valueResolver + private readonly ValueResolver $valueResolver, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php b/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php index aa008f6c169..84f0310cd86 100644 --- a/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php +++ b/rules/Php80/Rector/Catch_/RemoveUnusedVariableInCatchRector.php @@ -9,6 +9,7 @@ use PhpParser\Node\Stmt\TryCatch; use Rector\Core\Contract\PhpParser\Node\StmtsAwareInterface; use Rector\Core\NodeManipulator\StmtsManipulator; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\VersionBonding\Contract\MinPhpVersionInterface; @@ -23,7 +24,8 @@ final class RemoveUnusedVariableInCatchRector extends AbstractRector implements MinPhpVersionInterface { public function __construct( - private readonly StmtsManipulator $stmtsManipulator + private readonly StmtsManipulator $stmtsManipulator, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php b/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php index 72b910771d5..223aa7cc478 100644 --- a/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php +++ b/rules/Php80/Rector/ClassMethod/AddParamBasedOnParentClassMethodRector.php @@ -20,6 +20,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PHPStan\Reflection\MethodReflection; use Rector\Core\PhpParser\AstResolver; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Printer\BetterStandardPrinter; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\MethodName; @@ -40,6 +41,7 @@ public function __construct( private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, private readonly AstResolver $astResolver, private readonly BetterStandardPrinter $betterStandardPrinter, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/Php80/Rector/Class_/StringableForToStringRector.php b/rules/Php80/Rector/Class_/StringableForToStringRector.php index 21a49ea2ba8..fd7ea95afb8 100644 --- a/rules/Php80/Rector/Class_/StringableForToStringRector.php +++ b/rules/Php80/Rector/Class_/StringableForToStringRector.php @@ -14,6 +14,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\Stmt\Return_; use Rector\Core\NodeAnalyzer\ClassAnalyzer; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\MethodName; use Rector\Core\ValueObject\PhpVersionFeature; @@ -38,7 +39,8 @@ final class StringableForToStringRector extends AbstractRector implements MinPhp public function __construct( private readonly FamilyRelationsAnalyzer $familyRelationsAnalyzer, private readonly ReturnTypeInferer $returnTypeInferer, - private readonly ClassAnalyzer $classAnalyzer + private readonly ClassAnalyzer $classAnalyzer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php b/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php index 437d4064e20..308dce42007 100644 --- a/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php +++ b/rules/Php81/Rector/Property/ReadOnlyPropertyRector.php @@ -19,6 +19,7 @@ use Rector\Core\NodeAnalyzer\ParamAnalyzer; use Rector\Core\NodeManipulator\PropertyFetchAssignManipulator; use Rector\Core\NodeManipulator\PropertyManipulator; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\MethodName; use Rector\Core\ValueObject\PhpVersionFeature; @@ -40,7 +41,8 @@ public function __construct( private readonly PropertyManipulator $propertyManipulator, private readonly PropertyFetchAssignManipulator $propertyFetchAssignManipulator, private readonly ParamAnalyzer $paramAnalyzer, - private readonly VisibilityManipulator $visibilityManipulator + private readonly VisibilityManipulator $visibilityManipulator, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php b/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php index 79ed26c1c91..39b2c71eda8 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/AddParamTypeBasedOnPHPUnitDataProviderRector.php @@ -21,6 +21,7 @@ use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfo; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Core\Exception\ShouldNotHappenException; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\NodeTypeResolver\PHPStan\Type\TypeFactory; @@ -48,7 +49,8 @@ final class AddParamTypeBasedOnPHPUnitDataProviderRector extends AbstractRector public function __construct( private readonly TypeFactory $typeFactory, private readonly TestsNodeAnalyzer $testsNodeAnalyzer, - private readonly PhpDocInfoFactory $phpDocInfoFactory + private readonly PhpDocInfoFactory $phpDocInfoFactory, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php index ebe7281816f..7f2cf0d63ed 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/BoolReturnTypeFromStrictScalarReturnsRector.php @@ -25,6 +25,7 @@ use PhpParser\Node\Stmt\Return_; use PHPStan\Reflection\ReflectionProvider; use PHPStan\Type\BooleanType; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\PhpParser\Node\Value\ValueResolver; use Rector\Core\Rector\AbstractRector; use Rector\Core\ValueObject\PhpVersionFeature; @@ -42,6 +43,7 @@ public function __construct( private readonly ReturnAnalyzer $returnAnalyzer, private readonly ReflectionProvider $reflectionProvider, private readonly ValueResolver $valueResolver, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php index 158e8d78b06..62c49a4c526 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByMethodCallTypeRector.php @@ -17,6 +17,7 @@ use PhpParser\Node\Stmt\ClassMethod; use PhpParser\Node\UnionType; use PHPStan\Analyser\Scope; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\NodeTypeResolver\Node\AttributeKey; use Rector\TypeDeclaration\Guard\ParamTypeAddGuard; @@ -33,7 +34,8 @@ final class ParamTypeByMethodCallTypeRector extends AbstractScopeAwareRector public function __construct( private readonly CallerParamMatcher $callerParamMatcher, private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, - private readonly ParamTypeAddGuard $paramTypeAddGuard + private readonly ParamTypeAddGuard $paramTypeAddGuard, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php index 733b9a97613..9ecbd9660f6 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ParamTypeByParentCallTypeRector.php @@ -11,6 +11,7 @@ use PHPStan\Analyser\Scope; use PHPStan\Reflection\ClassReflection; use Rector\Core\Enum\ObjectReference; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -25,7 +26,8 @@ final class ParamTypeByParentCallTypeRector extends AbstractScopeAwareRector { public function __construct( private readonly CallerParamMatcher $callerParamMatcher, - private readonly ReflectionResolver $reflectionResolver + private readonly ReflectionResolver $reflectionResolver, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php index 69fbc0a716e..93e0643fb56 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnNeverTypeRector.php @@ -16,6 +16,7 @@ use PhpParser\Node\Stmt\Throw_; use PHPStan\Analyser\Scope; use PHPStan\Type\NeverType; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\NodeNestingScope\ValueObject\ControlStructure; @@ -33,6 +34,7 @@ final class ReturnNeverTypeRector extends AbstractScopeAwareRector implements Mi { public function __construct( private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, + private readonly BetterNodeFinder $betterNodeFinder, ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php index d73b9c9d01e..438108d8c3d 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromReturnNewRector.php @@ -25,6 +25,7 @@ use Rector\Core\Enum\ObjectReference; use Rector\Core\Exception\ShouldNotHappenException; use Rector\Core\NodeAnalyzer\ClassAnalyzer; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\ValueObject\PhpVersionFeature; @@ -52,7 +53,8 @@ public function __construct( private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, private readonly ReturnTypeInferer $returnTypeInferer, private readonly ClassAnalyzer $classAnalyzer, - private readonly NewTypeResolver $newTypeResolver + private readonly NewTypeResolver $newTypeResolver, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php index af7e59ecaf8..6e47737dd54 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictNewArrayRector.php @@ -25,6 +25,7 @@ use PHPStan\Type\Type; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\BetterPhpDocParser\PhpDocManipulator\PhpDocTypeChanger; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\PhpVersion; use Rector\TypeDeclaration\TypeInferer\ReturnTypeInferer; @@ -42,7 +43,8 @@ public function __construct( private readonly PhpDocTypeChanger $phpDocTypeChanger, private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, private readonly ReturnTypeInferer $returnTypeInferer, - private readonly PhpDocInfoFactory $phpDocInfoFactory + private readonly PhpDocInfoFactory $phpDocInfoFactory, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php index 9c11dce88c0..cb3bf207083 100644 --- a/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php +++ b/rules/TypeDeclaration/Rector/ClassMethod/ReturnTypeFromStrictTypedPropertyRector.php @@ -14,6 +14,7 @@ use PHPStan\Reflection\Php\PhpPropertyReflection; use PHPStan\Type\MixedType; use PHPStan\Type\Type; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\ValueObject\PhpVersionFeature; @@ -32,7 +33,8 @@ final class ReturnTypeFromStrictTypedPropertyRector extends AbstractScopeAwareRe public function __construct( private readonly TypeFactory $typeFactory, private readonly ReflectionResolver $reflectionResolver, - private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard + private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php b/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php index 2f4fb2ac7b0..f7b901eb1c0 100644 --- a/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php +++ b/rules/TypeDeclaration/Rector/Class_/ReturnTypeFromStrictTernaryRector.php @@ -14,6 +14,7 @@ use PHPStan\Type\MixedType; use PHPStan\Type\TypeCombinator; use PHPStan\Type\UnionType; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\ValueObject\PhpVersionFeature; use Rector\NodeTypeResolver\Node\AttributeKey; @@ -31,7 +32,8 @@ final class ReturnTypeFromStrictTernaryRector extends AbstractScopeAwareRector i { public function __construct( private readonly ClassMethodReturnTypeOverrideGuard $classMethodReturnTypeOverrideGuard, - private readonly ReturnTypeInferer $returnTypeInferer + private readonly ReturnTypeInferer $returnTypeInferer, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/rules/TypeDeclaration/Rector/Param/ParamTypeFromStrictTypedPropertyRector.php b/rules/TypeDeclaration/Rector/Param/ParamTypeFromStrictTypedPropertyRector.php index 37adc45e238..ee18a982da1 100644 --- a/rules/TypeDeclaration/Rector/Param/ParamTypeFromStrictTypedPropertyRector.php +++ b/rules/TypeDeclaration/Rector/Param/ParamTypeFromStrictTypedPropertyRector.php @@ -18,6 +18,7 @@ use PHPStan\Type\MixedType; use PHPStan\Type\Type; use PHPStan\Type\UnionType; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractScopeAwareRector; use Rector\Core\Reflection\ReflectionResolver; use Rector\Core\ValueObject\PhpVersionFeature; @@ -35,7 +36,8 @@ final class ParamTypeFromStrictTypedPropertyRector extends AbstractScopeAwareRec { public function __construct( private readonly ReflectionResolver $reflectionResolver, - private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard + private readonly ParentClassMethodTypeOverrideGuard $parentClassMethodTypeOverrideGuard, + private readonly BetterNodeFinder $betterNodeFinder ) { } diff --git a/src/DependencyInjection/LazyContainerFactory.php b/src/DependencyInjection/LazyContainerFactory.php index bb492c40595..b98da0db22b 100644 --- a/src/DependencyInjection/LazyContainerFactory.php +++ b/src/DependencyInjection/LazyContainerFactory.php @@ -537,6 +537,7 @@ static function (AbstractRector $rector, Container $container): void { $container->get(Skipper::class), // @deprecated, use injected PhpDocInfoFactory service in your Rector rules $container->get(ValueResolver::class), + // @deprecated, use injected PhpDocInfoFactory service in your Rector rules $container->get(BetterNodeFinder::class), $container->get(NodeComparator::class), $container->get(CurrentFileProvider::class), diff --git a/src/Rector/AbstractRector.php b/src/Rector/AbstractRector.php index 6556de778b1..3f526019460 100644 --- a/src/Rector/AbstractRector.php +++ b/src/Rector/AbstractRector.php @@ -35,6 +35,8 @@ * @property-read PhpDocInfoFactory $phpDocInfoFactory; @deprecated The parent AbstractRector dependency is deprecated and will be removed. Use dependency injection in your own rule instead. * * @property-read ValueResolver $valueResolver; @deprecated The parent AbstractRector dependency is deprecated and will be removed. Use dependency injection in your own rule instead. + * + * @property-read BetterNodeFinder $betterNodeFinder; @deprecated The parent AbstractRector dependency is deprecated and will be removed. Use dependency injection in your own rule instead. */ abstract class AbstractRector extends NodeVisitorAbstract implements RectorInterface { @@ -61,8 +63,6 @@ abstract class AbstractRector extends NodeVisitorAbstract implements RectorInter protected NodeFactory $nodeFactory; - protected BetterNodeFinder $betterNodeFinder; - protected NodeComparator $nodeComparator; protected File $file; @@ -118,7 +118,6 @@ public function autowire( $this->nodeFactory = $nodeFactory; $this->staticTypeMapper = $staticTypeMapper; $this->skipper = $skipper; - $this->betterNodeFinder = $betterNodeFinder; $this->nodeComparator = $nodeComparator; $this->currentFileProvider = $currentFileProvider; $this->createdByRuleDecorator = $createdByRuleDecorator; @@ -126,6 +125,7 @@ public function autowire( $this->deprecatedDependencies['phpDocInfoFactory'] = $phpDocInfoFactory; $this->deprecatedDependencies['valueResolver'] = $valueResolver; + $this->deprecatedDependencies['betterNodeFinder'] = $betterNodeFinder; } /** diff --git a/utils/Rector/MoveAbstractRectorToChildrenRector.php b/utils/Rector/MoveAbstractRectorToChildrenRector.php index e04107d6f14..b367f160256 100644 --- a/utils/Rector/MoveAbstractRectorToChildrenRector.php +++ b/utils/Rector/MoveAbstractRectorToChildrenRector.php @@ -10,9 +10,8 @@ use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\Property; use PHPStan\Type\ObjectType; -use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\Core\NodeManipulator\ClassDependencyManipulator; -use Rector\Core\PhpParser\Node\Value\ValueResolver; +use Rector\Core\PhpParser\Node\BetterNodeFinder; use Rector\Core\Rector\AbstractRector; use Rector\PostRector\ValueObject\PropertyMetadata; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; @@ -23,8 +22,9 @@ final class MoveAbstractRectorToChildrenRector extends AbstractRector * @var array */ private const PROPERTIES_TO_TYPES = [ - 'phpDocInfoFactory' => PhpDocInfoFactory::class, - 'valueResolver' => ValueResolver::class, + // 'phpDocInfoFactory' => PhpDocInfoFactory::class, + // 'valueResolver' => ValueResolver::class, + 'betterNodeFinder' => BetterNodeFinder::class, ]; public function __construct(