Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 2 additions & 4 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^2.16",
"jetbrains/phpstorm-stubs": "^2019.2",
"jetbrains/phpstorm-stubs": "^2019.3",
"ocramius/package-versions": "^1.4|^1.5",
"phpunit/phpunit": "^8.4|^9.0",
"symplify/changelog-linker": "^7.2",
Expand Down Expand Up @@ -258,7 +258,5 @@
"branch-alias": {
"dev-master": "0.6-dev"
}
},
"minimum-stability": "dev",
"prefer-stable": true
}
}
29 changes: 9 additions & 20 deletions packages/node-name-resolver/src/NodeNameResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,15 @@
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[]
*/
Expand All @@ -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;
}

Expand Down Expand Up @@ -59,7 +66,7 @@ public function isName(Node $node, string $name): bool
}

// is probably regex pattern
if ($this->isRegexPattern($name)) {
if ($this->regexPatternDetector->isRegexPattern($name)) {
return (bool) Strings::match($resolvedName, $name);
}

Expand Down Expand Up @@ -108,24 +115,6 @@ public function areNamesEqual(Node $firstNode, Node $secondNode): bool
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
*/
Expand Down
28 changes: 28 additions & 0 deletions packages/node-name-resolver/src/Regex/RegexPatternDetector.php
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
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;

Expand All @@ -36,7 +37,9 @@ protected function visitNodes(array $nodes): void
{
$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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
/**
* @see https://github.com/doctrine/orm/blob/2.7/UPGRADE.md#query-querybuilder-and-nativequery-parameters-bc-break
*
* @see \Rector\DoctrineCodeQuality\Tests\Rector\Class_\ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection\ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest
* @see \Rector\DoctrineCodeQuality\Tests\Rector\Class_\ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection\ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest
*/
class ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector extends AbstractRector
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
use Rector\Core\Testing\PHPUnit\AbstractRectorTestCase;
use Rector\DoctrineCodeQuality\Rector\Class_\ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector;

final class ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest extends AbstractRectorTestCase
final class ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest extends AbstractRectorTestCase
{
/**
* @dataProvider provideData()
Expand Down
17 changes: 13 additions & 4 deletions rules/php-70/src/EregToPcreTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,8 @@ private function _ere2pcre(string $s, int $i): array
$r[$rr] .= '()';
++$i;
} else {
[$t, $ii] = $this->_ere2pcre($s, $i + 1);
$position = (int) $i + 1;
[$t, $ii] = $this->_ere2pcre($s, $position);
if ($ii >= $l || $s[$ii] !== ')') {
throw new InvalidEregException('"(" does not have a matching ")"');
}
Expand All @@ -100,11 +101,15 @@ private function _ere2pcre(string $s, int $i): array
do {
if ($s[$i] === '[' &&
$i + 1 < $l && Strings::contains('.=:', $s[$i + 1])) {
$ii = strpos($s, ']', $i);
$offset = (int) $i;
$ii = strpos($s, ']', $offset);
if ($ii === false) {
throw new InvalidEregException('"[" does not have a matching "]"');
}
$ccls = Strings::substring($s, $i + 1, $ii - ($i + 1));

$start = (int) $i + 1;
$length = (int) ($ii - ($i + 1));
$ccls = Strings::substring($s, $start, $length);
$cclsmap = [
':alnum:' => '[:alnum:]',
':alpha:' => '[:alpha:]',
Expand Down Expand Up @@ -195,11 +200,15 @@ private function _ere2pcre(string $s, int $i): array
$r[$rr] .= $c;
++$i;
} elseif ($c === '{') {
$i = (int) $i;
$ii = strpos($s, '}', $i);
if ($ii === false) {
throw new InvalidEregException('"{" does not have a matching "}"');
}
$bound = Strings::substring($s, $i + 1, $ii - ($i + 1));

$start = (int) $i + 1;
$length = (int) $ii - ($i + 1);
$bound = Strings::substring($s, $start, $length);

$m = Strings::match($bound, '/^(\d|[1-9]\d|1\d\d|
2[0-4]\d|25[0-5])
Expand Down