From 11f401daf9c8114480dcc8d787a41d4b24aaf1e1 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Thu, 13 Feb 2020 11:09:07 +0100 Subject: [PATCH 1/3] fix ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection location --- ...arametersMethodParameterFromArrayToArrayCollectionRector.php | 2 +- ...etersMethodParameterFromArrayToArrayCollectionRectorTest.php | 2 +- .../Fixture/extends_entity_repository.php.inc | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename {packages => rules}/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php (98%) rename packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest.php => rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest.php (93%) rename {packages => rules}/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/Fixture/extends_entity_repository.php.inc (100%) diff --git a/packages/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php b/rules/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php similarity index 98% rename from packages/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php rename to rules/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php index 5dd529995f42..43b8aca832b6 100644 --- a/packages/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php +++ b/rules/doctrine-code-quality/src/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRector.php @@ -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 { diff --git a/packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest.php b/rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest.php similarity index 93% rename from packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest.php rename to rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest.php index 8dbda3eac548..52d8b3873a42 100644 --- a/packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionTest.php +++ b/rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollectionRectorTest.php @@ -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() diff --git a/packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/Fixture/extends_entity_repository.php.inc b/rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/Fixture/extends_entity_repository.php.inc similarity index 100% rename from packages/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/Fixture/extends_entity_repository.php.inc rename to rules/doctrine-code-quality/tests/Rector/Class_/ChangeQuerySetParametersMethodParameterFromArrayToArrayCollection/Fixture/extends_entity_repository.php.inc From 60727074585a5bd9c47892c7af7a828fc3cf92ee Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Thu, 13 Feb 2020 11:09:51 +0100 Subject: [PATCH 2/3] decouple RegexPatternDetector --- .../src/NodeNameResolver.php | 29 ++++++------------- .../src/Regex/RegexPatternDetector.php | 28 ++++++++++++++++++ .../FunctionMethodAndClassNodeVisitorTest.php | 5 +++- 3 files changed, 41 insertions(+), 21 deletions(-) create mode 100644 packages/node-name-resolver/src/Regex/RegexPatternDetector.php diff --git a/packages/node-name-resolver/src/NodeNameResolver.php b/packages/node-name-resolver/src/NodeNameResolver.php index ef51d5968d48..e45da0fc412f 100644 --- a/packages/node-name-resolver/src/NodeNameResolver.php +++ b/packages/node-name-resolver/src/NodeNameResolver.php @@ -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[] */ @@ -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 @@ 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); } @@ -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 */ diff --git a/packages/node-name-resolver/src/Regex/RegexPatternDetector.php b/packages/node-name-resolver/src/Regex/RegexPatternDetector.php new file mode 100644 index 000000000000..58e3d163b24e --- /dev/null +++ b/packages/node-name-resolver/src/Regex/RegexPatternDetector.php @@ -0,0 +1,28 @@ +addVisitor(new NameResolver()); - $nodeTraverser->addVisitor(new FunctionMethodAndClassNodeVisitor(new ClassNaming(new NodeNameResolver()))); + $nodeTraverser->addVisitor( + new FunctionMethodAndClassNodeVisitor(new ClassNaming(new NodeNameResolver(new RegexPatternDetector()))) + ); $nodeTraverser->traverse($nodes); } From 13aff1163824a9d1ace4f4909cc461257906f021 Mon Sep 17 00:00:00 2001 From: TomasVotruba Date: Thu, 13 Feb 2020 11:10:09 +0100 Subject: [PATCH 3/3] fix statis int/float in ereg transformer --- composer.json | 6 ++---- rules/php-70/src/EregToPcreTransformer.php | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/composer.json b/composer.json index 551bb925856c..34d6bbd12676 100644 --- a/composer.json +++ b/composer.json @@ -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", @@ -258,7 +258,5 @@ "branch-alias": { "dev-master": "0.6-dev" } - }, - "minimum-stability": "dev", - "prefer-stable": true + } } diff --git a/rules/php-70/src/EregToPcreTransformer.php b/rules/php-70/src/EregToPcreTransformer.php index 92b0b70361eb..b05bf89bf8b4 100644 --- a/rules/php-70/src/EregToPcreTransformer.php +++ b/rules/php-70/src/EregToPcreTransformer.php @@ -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 ")"'); } @@ -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:]', @@ -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])