File manager - Edit - /var/www/payraty/helpdesk/vendor/rector/rector/vendor/rector/rector-phpunit/src/Rector/MethodCall/AssertTrueFalseToSpecificMethodRector.php
Back
<?php declare (strict_types=1); namespace Rector\PHPUnit\Rector\MethodCall; use PhpParser\Node; use PhpParser\Node\Arg; use PhpParser\Node\Expr\Empty_; use PhpParser\Node\Expr\FuncCall; use PhpParser\Node\Expr\MethodCall; use PhpParser\Node\Expr\StaticCall; use PhpParser\Node\Identifier; use Rector\Core\Rector\AbstractRector; use Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer; use Rector\PHPUnit\ValueObject\FunctionNameWithAssertMethods; use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample; use Symplify\RuleDocGenerator\ValueObject\RuleDefinition; /** * @see \Rector\PHPUnit\Tests\Rector\MethodCall\AssertTrueFalseToSpecificMethodRector\AssertTrueFalseToSpecificMethodRectorTest */ final class AssertTrueFalseToSpecificMethodRector extends AbstractRector { /** * @var FunctionNameWithAssertMethods[] */ private $functionNameWithAssertMethods = []; /** * @readonly * @var \Rector\PHPUnit\NodeAnalyzer\TestsNodeAnalyzer */ private $testsNodeAnalyzer; public function __construct(TestsNodeAnalyzer $testsNodeAnalyzer) { $this->testsNodeAnalyzer = $testsNodeAnalyzer; $this->functionNameWithAssertMethods = [new FunctionNameWithAssertMethods('is_readable', 'assertIsReadable', 'assertNotIsReadable'), new FunctionNameWithAssertMethods('array_key_exists', 'assertArrayHasKey', 'assertArrayNotHasKey'), new FunctionNameWithAssertMethods('array_search', 'assertContains', 'assertNotContains'), new FunctionNameWithAssertMethods('in_array', 'assertContains', 'assertNotContains'), new FunctionNameWithAssertMethods('empty', 'assertEmpty', 'assertNotEmpty'), new FunctionNameWithAssertMethods('file_exists', 'assertFileExists', 'assertFileNotExists'), new FunctionNameWithAssertMethods('is_dir', 'assertDirectoryExists', 'assertDirectoryNotExists'), new FunctionNameWithAssertMethods('is_infinite', 'assertInfinite', 'assertFinite'), new FunctionNameWithAssertMethods('is_null', 'assertNull', 'assertNotNull'), new FunctionNameWithAssertMethods('is_writable', 'assertIsWritable', 'assertNotIsWritable'), new FunctionNameWithAssertMethods('is_nan', 'assertNan', ''), new FunctionNameWithAssertMethods('is_a', 'assertInstanceOf', 'assertNotInstanceOf')]; } public function getRuleDefinition() : RuleDefinition { return new RuleDefinition('Turns true/false comparisons to their method name alternatives in PHPUnit TestCase when possible', [new CodeSample('$this->assertTrue(is_readable($readmeFile), "message");', '$this->assertIsReadable($readmeFile, "message");')]); } /** * @return array<class-string<Node>> */ public function getNodeTypes() : array { return [MethodCall::class, StaticCall::class]; } /** * @param MethodCall|StaticCall $node */ public function refactor(Node $node) : ?Node { if (!$this->testsNodeAnalyzer->isPHPUnitMethodCallNames($node, ['assertTrue', 'assertFalse', 'assertNotTrue', 'assertNotFalse'])) { return null; } if (!isset($node->args[0])) { return null; } $firstArgumentValue = $node->args[0]->value; if (!$firstArgumentValue instanceof FuncCall && !$firstArgumentValue instanceof Empty_) { return null; } foreach ($this->functionNameWithAssertMethods as $functionNameWithAssertMethod) { if (!$this->isName($firstArgumentValue, $functionNameWithAssertMethod->getFunctionName())) { continue; } $name = $this->getName($firstArgumentValue); if ($name === null) { return null; } $this->renameMethod($node, $functionNameWithAssertMethod); $this->moveFunctionArgumentsUp($node); return $node; } return null; } /** * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node */ private function renameMethod($node, FunctionNameWithAssertMethods $functionNameWithAssertMethods) : void { /** @var Identifier $identifierNode */ $identifierNode = $node->name; $oldMethodName = $identifierNode->toString(); if (\in_array($oldMethodName, ['assertTrue', 'assertNotFalse'], \true)) { $node->name = new Identifier($functionNameWithAssertMethods->getAssetMethodName()); } if ($functionNameWithAssertMethods->getNotAssertMethodName() === '') { return; } if (!\in_array($oldMethodName, ['assertFalse', 'assertNotTrue'], \true)) { return; } $node->name = new Identifier($functionNameWithAssertMethods->getNotAssertMethodName()); } /** * Before: * - $this->assertTrue(array_key_exists('...', ['...']), 'second argument'); * * After: * - $this->assertArrayHasKey('...', ['...'], 'second argument'); * @param \PhpParser\Node\Expr\MethodCall|\PhpParser\Node\Expr\StaticCall $node */ private function moveFunctionArgumentsUp($node) : void { $funcCallOrEmptyNode = $node->args[0]->value; if ($funcCallOrEmptyNode instanceof FuncCall) { $funcCallOrEmptyNodeName = $this->getName($funcCallOrEmptyNode); if ($funcCallOrEmptyNodeName === null) { return; } $funcCallOrEmptyNodeArgs = $funcCallOrEmptyNode->args; $oldArguments = $node->args; unset($oldArguments[0]); $node->args = $this->buildNewArguments($funcCallOrEmptyNodeName, $funcCallOrEmptyNodeArgs, $oldArguments); } if ($funcCallOrEmptyNode instanceof Empty_) { $node->args[0] = new Arg($funcCallOrEmptyNode->expr); } } /** * @param Arg[] $funcCallOrEmptyNodeArgs * @param Arg[] $oldArguments * @return mixed[] */ private function buildNewArguments(string $funcCallOrEmptyNodeName, array $funcCallOrEmptyNodeArgs, array $oldArguments) : array { if (\in_array($funcCallOrEmptyNodeName, ['in_array', 'array_search'], \true) && \count($funcCallOrEmptyNodeArgs) === 3) { unset($funcCallOrEmptyNodeArgs[2]); return $this->appendArgs($funcCallOrEmptyNodeArgs, $oldArguments); } if ($funcCallOrEmptyNodeName === 'is_a') { $newArgs = [$funcCallOrEmptyNodeArgs[1], $funcCallOrEmptyNodeArgs[0]]; return $this->appendArgs($newArgs, $oldArguments); } return $this->appendArgs($funcCallOrEmptyNodeArgs, $oldArguments); } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.30 | Generation time: 0 |
proxy
|
phpinfo
|
Settings