?????????? ????????? - ??????????????? - /home/agenciai/public_html/cd38d8/DeadCode.zip
???????
PK �6(\�|�� � $ NodeManipulator/CountManipulator.phpnu �[��� <?php declare (strict_types=1); namespace Rector\DeadCode\NodeManipulator; use PhpParser\Node\Expr; use PhpParser\Node\Expr\BinaryOp\Greater; use PhpParser\Node\Expr\BinaryOp\GreaterOrEqual; use PhpParser\Node\Expr\BinaryOp\Smaller; use PhpParser\Node\Expr\BinaryOp\SmallerOrEqual; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Scalar\LNumber; use PHPStan\Type\NeverType; use Rector\NodeNameResolver\NodeNameResolver; use Rector\NodeTypeResolver\NodeTypeResolver; use Rector\PhpParser\Comparing\NodeComparator; final class CountManipulator { /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @readonly * @var \Rector\PhpParser\Comparing\NodeComparator */ private $nodeComparator; /** * @readonly * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; public function __construct(NodeNameResolver $nodeNameResolver, NodeComparator $nodeComparator, NodeTypeResolver $nodeTypeResolver) { $this->nodeNameResolver = $nodeNameResolver; $this->nodeComparator = $nodeComparator; $this->nodeTypeResolver = $nodeTypeResolver; } public function isCounterHigherThanOne(Expr $firstExpr, Expr $secondExpr) : bool { // e.g. count($values) > 0 if ($firstExpr instanceof Greater) { return $this->isGreater($firstExpr, $secondExpr); } // e.g. count($values) >= 1 if ($firstExpr instanceof GreaterOrEqual) { return $this->isGreaterOrEqual($firstExpr, $secondExpr); } // e.g. 0 < count($values) if ($firstExpr instanceof Smaller) { return $this->isSmaller($firstExpr, $secondExpr); } // e.g. 1 <= count($values) if ($firstExpr instanceof SmallerOrEqual) { return $this->isSmallerOrEqual($firstExpr, $secondExpr); } return \false; } private function isGreater(Greater $greater, Expr $expr) : bool { if (!$this->isNumber($greater->right, 0)) { return \false; } return $this->isCountWithExpression($greater->left, $expr); } private function isGreaterOrEqual(GreaterOrEqual $greaterOrEqual, Expr $expr) : bool { if (!$this->isNumber($greaterOrEqual->right, 1)) { return \false; } return $this->isCountWithExpression($greaterOrEqual->left, $expr); } private function isSmaller(Smaller $smaller, Expr $expr) : bool { if (!$this->isNumber($smaller->left, 0)) { return \false; } return $this->isCountWithExpression($smaller->right, $expr); } private function isSmallerOrEqual(SmallerOrEqual $smallerOrEqual, Expr $expr) : bool { if (!$this->isNumber($smallerOrEqual->left, 1)) { return \false; } return $this->isCountWithExpression($smallerOrEqual->right, $expr); } private function isNumber(Expr $expr, int $value) : bool { if (!$expr instanceof LNumber) { return \false; } return $expr->value === $value; } private function isCountWithExpression(Expr $node, Expr $expr) : bool { if (!$node instanceof FuncCall) { return \false; } if (!$this->nodeNameResolver->isName($node, 'count')) { return \false; } if ($node->isFirstClassCallable()) { return \false; } if (!isset($node->getArgs()[0])) { return \false; } $countedExpr = $node->getArgs()[0]->value; if ($this->nodeComparator->areNodesEqual($countedExpr, $expr)) { $exprType = $this->nodeTypeResolver->getNativeType($expr); if (!$exprType->isArray()->yes()) { return $exprType instanceof NeverType; } return \true; } return \false; } } PK �6(\��� � 4 NodeManipulator/ControllerClassMethodManipulator.phpnu �[��� <?php declare (strict_types=1); namespace Rector\DeadCode\NodeManipulator; use PhpParser\Node\Name; use PhpParser\Node\Stmt\Class_; use PhpParser\Node\Stmt\ClassMethod; use PHPStan\PhpDocParser\Ast\PhpDoc\GenericTagValueNode; use Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory; use Rector\NodeNameResolver\NodeNameResolver; final class ControllerClassMethodManipulator { /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @readonly * @var \Rector\BetterPhpDocParser\PhpDocInfo\PhpDocInfoFactory */ private $phpDocInfoFactory; public function __construct(NodeNameResolver $nodeNameResolver, PhpDocInfoFactory $phpDocInfoFactory) { $this->nodeNameResolver = $nodeNameResolver; $this->phpDocInfoFactory = $phpDocInfoFactory; } public function isControllerClassMethod(Class_ $class, ClassMethod $classMethod) : bool { if (!$classMethod->isPublic()) { return \false; } if (!$this->hasParentClassController($class)) { return \false; } $phpDocInfo = $this->phpDocInfoFactory->createFromNodeOrEmpty($classMethod); return $phpDocInfo->hasByType(GenericTagValueNode::class); } private function hasParentClassController(Class_ $class) : bool { if (!$class->extends instanceof Name) { return \false; } $parentClassName = $this->nodeNameResolver->getName($class->extends); if (\substr_compare($parentClassName, 'Controller', -\strlen('Controller')) === 0) { return \true; } return \substr_compare($parentClassName, 'Presenter', -\strlen('Presenter')) === 0; } } PK �6(\��$cb b + NodeManipulator/ClassMethodParamRemover.phpnu �[��� <?php declare (strict_types=1); namespace Rector\DeadCode\NodeManipulator; use PhpParser\Node\Stmt\ClassMethod; use Rector\NodeAnalyzer\ParamAnalyzer; use Rector\Removing\NodeManipulator\ComplexNodeRemover; final class ClassMethodParamRemover { /** * @readonly * @var \Rector\NodeAnalyzer\ParamAnalyzer */ private $paramAnalyzer; /** * @readonly * @var \Rector\Removing\NodeManipulator\ComplexNodeRemover */ private $complexNodeRemover; public function __construct(ParamAnalyzer $paramAnalyzer, ComplexNodeRemover $complexNodeRemover) { $this->paramAnalyzer = $paramAnalyzer; $this->complexNodeRemover = $complexNodeRemover; } public function processRemoveParams(ClassMethod $classMethod) : ?ClassMethod { $paramKeysToBeRemoved = []; foreach ($classMethod->params as $key => $param) { if ($this->paramAnalyzer->isParamUsedInClassMethod($classMethod, $param)) { continue; } $paramKeysToBeRemoved[] = $key; } if ($paramKeysToBeRemoved === []) { return null; } $removedParamKeys = $this->complexNodeRemover->processRemoveParamWithKeys($classMethod, $paramKeysToBeRemoved); if ($removedParamKeys !== []) { return $classMethod; } return null; } } PK �6(\���d d ) NodeManipulator/LivingCodeManipulator.phpnu �[��� <?php declare (strict_types=1); namespace Rector\DeadCode\NodeManipulator; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Expr\ArrayDimFetch; use PhpParser\Node\Expr\BinaryOp; use PhpParser\Node\Expr\BinaryOp\BooleanAnd; use PhpParser\Node\Expr\BinaryOp\BooleanOr; use PhpParser\Node\Expr\BinaryOp\Coalesce; use PhpParser\Node\Expr\BinaryOp\LogicalAnd; use PhpParser\Node\Expr\BinaryOp\LogicalOr; use PhpParser\Node\Expr\BitwiseNot; use PhpParser\Node\Expr\BooleanNot; use PhpParser\Node\Expr\Cast; use PhpParser\Node\Expr\ClassConstFetch; use PhpParser\Node\Expr\Clone_; use PhpParser\Node\Expr\Closure; use PhpParser\Node\Expr\ConstFetch; use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\Instanceof_; use PhpParser\Node\Expr\Isset_; use PhpParser\Node\Expr\PropertyFetch; use PhpParser\Node\Expr\StaticPropertyFetch; use PhpParser\Node\Expr\UnaryMinus; use PhpParser\Node\Expr\UnaryPlus; use PhpParser\Node\Expr\Variable; use PhpParser\Node\Scalar; use PHPStan\Type\ObjectType; use Rector\NodeTypeResolver\NodeTypeResolver; final class LivingCodeManipulator { /** * @readonly * @var \Rector\NodeTypeResolver\NodeTypeResolver */ private $nodeTypeResolver; public function __construct(NodeTypeResolver $nodeTypeResolver) { $this->nodeTypeResolver = $nodeTypeResolver; } /** * @return Expr[]|mixed[] * @param \PhpParser\Node|int|string|null $expr */ public function keepLivingCodeFromExpr($expr) : array { if (!$expr instanceof Expr) { return []; } if ($expr instanceof Closure || $expr instanceof Scalar || $expr instanceof ConstFetch) { return []; } if ($this->isNestedExpr($expr)) { return $this->keepLivingCodeFromExpr($expr->expr); } if ($expr instanceof Variable) { return $this->keepLivingCodeFromExpr($expr->name); } if ($expr instanceof PropertyFetch) { return \array_merge($this->keepLivingCodeFromExpr($expr->var), $this->keepLivingCodeFromExpr($expr->name)); } if ($expr instanceof ArrayDimFetch) { $type = $this->nodeTypeResolver->getType($expr->var); if ($type instanceof ObjectType) { $objectType = new ObjectType('ArrayAccess'); if ($objectType->isSuperTypeOf($type)->yes()) { return [$expr]; } } return \array_merge($this->keepLivingCodeFromExpr($expr->var), $this->keepLivingCodeFromExpr($expr->dim)); } if ($expr instanceof ClassConstFetch || $expr instanceof StaticPropertyFetch) { return \array_merge($this->keepLivingCodeFromExpr($expr->class), $this->keepLivingCodeFromExpr($expr->name)); } if ($this->isBinaryOpWithoutChange($expr)) { /** @var BinaryOp $binaryOp */ $binaryOp = $expr; return $this->processBinary($binaryOp); } if ($expr instanceof Instanceof_) { return \array_merge($this->keepLivingCodeFromExpr($expr->expr), $this->keepLivingCodeFromExpr($expr->class)); } if ($expr instanceof Isset_) { return $this->processIsset($expr); } return [$expr]; } private function isNestedExpr(Expr $expr) : bool { return $expr instanceof Cast || $expr instanceof Empty_ || $expr instanceof UnaryMinus || $expr instanceof UnaryPlus || $expr instanceof BitwiseNot || $expr instanceof BooleanNot || $expr instanceof Clone_; } private function isBinaryOpWithoutChange(Expr $expr) : bool { if (!$expr instanceof BinaryOp) { return \false; } return !($expr instanceof LogicalAnd || $expr instanceof BooleanAnd || $expr instanceof LogicalOr || $expr instanceof BooleanOr || $expr instanceof Coalesce); } /** * @return Expr[] */ private function processBinary(BinaryOp $binaryOp) : array { return \array_merge($this->keepLivingCodeFromExpr($binaryOp->left), $this->keepLivingCodeFromExpr($binaryOp->right)); } /** * @return mixed[] */ private function processIsset(Isset_ $isset) : array { $livingExprs = []; foreach ($isset->vars as $expr) { $livingExprs = \array_merge($livingExprs, $this->keepLivingCodeFromExpr($expr)); } return $livingExprs; } } PK �6(\͐�v v 0 NodeManipulator/VariadicFunctionLikeDetector.phpnu �[��� <?php declare (strict_types=1); namespace Rector\DeadCode\NodeManipulator; use PhpParser\Node; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\FunctionLike; use PhpParser\NodeTraverser; use Rector\NodeNameResolver\NodeNameResolver; use Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser; final class VariadicFunctionLikeDetector { /** * @readonly * @var \Rector\PhpDocParser\NodeTraverser\SimpleCallableNodeTraverser */ private $simpleCallableNodeTraverser; /** * @readonly * @var \Rector\NodeNameResolver\NodeNameResolver */ private $nodeNameResolver; /** * @var string[] */ private const VARIADIC_FUNCTION_NAMES = ['func_get_arg', 'func_get_args', 'func_num_args']; public function __construct(SimpleCallableNodeTraverser $simpleCallableNodeTraverser, NodeNameResolver $nodeNameResolver) { $this->simpleCallableNodeTraverser = $simpleCallableNodeTraverser; $this->nodeNameResolver = $nodeNameResolver; } /** * @api */ public function isVariadic(FunctionLike $functionLike) : bool { $isVariadic = \false; $this->simpleCallableNodeTraverser->traverseNodesWithCallable((array) $functionLike->getStmts(), function (Node $node) use(&$isVariadic) : ?int { if (!$node instanceof FuncCall) { return null; } if (!$this->nodeNameResolver->isNames($node, self::VARIADIC_FUNCTION_NAMES)) { return null; } $isVariadic = \true; return NodeTraverser::STOP_TRAVERSAL; }); return $isVariadic; } } PK �6(\�ڕ�� � &