mirror of
https://github.com/rectorphp/rector.git
synced 2024-06-11 05:32:23 +00:00
decouple RegexPatternDetector
This commit is contained in:
parent
11f401daf9
commit
6072707458
|
@ -12,9 +12,15 @@ use PhpParser\Node\Stmt\ClassLike;
|
|||
use PhpParser\Node\Stmt\Interface_;
|
||||
use PhpParser\Node\Stmt\Trait_;
|
||||
use Rector\NodeNameResolver\Contract\NodeNameResolverInterface;
|
||||
use Rector\NodeNameResolver\Regex\RegexPatternDetector;
|
||||
|
||||
final class NodeNameResolver
|
||||
{
|
||||
/**
|
||||
* @var RegexPatternDetector
|
||||
*/
|
||||
private $regexPatternDetector;
|
||||
|
||||
/**
|
||||
* @var NodeNameResolverInterface[]
|
||||
*/
|
||||
|
@ -23,8 +29,9 @@ final class NodeNameResolver
|
|||
/**
|
||||
* @param NodeNameResolverInterface[] $nodeNameResolvers
|
||||
*/
|
||||
public function __construct(array $nodeNameResolvers = [])
|
||||
public function __construct(RegexPatternDetector $regexPatternDetector, array $nodeNameResolvers = [])
|
||||
{
|
||||
$this->regexPatternDetector = $regexPatternDetector;
|
||||
$this->nodeNameResolvers = $nodeNameResolvers;
|
||||
}
|
||||
|
||||
|
@ -59,7 +66,7 @@ final class NodeNameResolver
|
|||
}
|
||||
|
||||
// is probably regex pattern
|
||||
if ($this->isRegexPattern($name)) {
|
||||
if ($this->regexPatternDetector->isRegexPattern($name)) {
|
||||
return (bool) Strings::match($resolvedName, $name);
|
||||
}
|
||||
|
||||
|
@ -108,24 +115,6 @@ final class NodeNameResolver
|
|||
return $this->getName($firstNode) === $this->getName($secondNode);
|
||||
}
|
||||
|
||||
private function isRegexPattern(string $name): bool
|
||||
{
|
||||
if (Strings::length($name) <= 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$firstChar = $name[0];
|
||||
$lastChar = $name[strlen($name) - 1];
|
||||
if ($firstChar !== $lastChar) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// this prevents miss matching like "aMethoda"
|
||||
$possibleDelimiters = ['#', '~', '/'];
|
||||
|
||||
return in_array($firstChar, $possibleDelimiters, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Interface_|Trait_ $classLike
|
||||
*/
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Rector\NodeNameResolver\Regex;
|
||||
|
||||
use Nette\Utils\Strings;
|
||||
|
||||
final class RegexPatternDetector
|
||||
{
|
||||
public function isRegexPattern(string $name): bool
|
||||
{
|
||||
if (Strings::length($name) <= 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$firstChar = $name[0];
|
||||
$lastChar = $name[strlen($name) - 1];
|
||||
if ($firstChar !== $lastChar) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// this prevents miss matching like "aMethoda"
|
||||
$possibleDelimiters = ['#', '~', '/'];
|
||||
|
||||
return in_array($firstChar, $possibleDelimiters, true);
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ use PhpParser\NodeVisitor\NameResolver;
|
|||
use Rector\CodingStyle\Naming\ClassNaming;
|
||||
use Rector\Core\Testing\PHPUnit\AbstractNodeVisitorTestCase;
|
||||
use Rector\NodeNameResolver\NodeNameResolver;
|
||||
use Rector\NodeNameResolver\Regex\RegexPatternDetector;
|
||||
use Rector\NodeTypeResolver\Node\AttributeKey;
|
||||
use Rector\NodeTypeResolver\NodeVisitor\FunctionMethodAndClassNodeVisitor;
|
||||
|
||||
|
@ -36,7 +37,9 @@ final class FunctionMethodAndClassNodeVisitorTest extends AbstractNodeVisitorTes
|
|||
{
|
||||
$nodeTraverser = new NodeTraverser();
|
||||
$nodeTraverser->addVisitor(new NameResolver());
|
||||
$nodeTraverser->addVisitor(new FunctionMethodAndClassNodeVisitor(new ClassNaming(new NodeNameResolver())));
|
||||
$nodeTraverser->addVisitor(
|
||||
new FunctionMethodAndClassNodeVisitor(new ClassNaming(new NodeNameResolver(new RegexPatternDetector())))
|
||||
);
|
||||
$nodeTraverser->traverse($nodes);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user