Skip to content

Commit 54e70a3

Browse files
committed
Updated Rector to commit 4ed71aeee69c5f327243c840d2ead5cbf064e378
rectorphp/rector-src@4ed71ae Skip ClosureToArrowFunctionRector when closure has @var docblock (#7885)
1 parent 343567f commit 54e70a3

7 files changed

Lines changed: 179 additions & 6 deletions

File tree

vendor/composer/autoload_classmap.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1955,6 +1955,7 @@
19551955
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableInstanceRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php',
19561956
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddKeysExistsAssertForKeyUseRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/AddKeysExistsAssertForKeyUseRector.php',
19571957
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BareCreateMockAssignToDirectUseRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php',
1958+
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BehatPHPUnitAssertToWebmozzartRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/BehatPHPUnitAssertToWebmozzartRector.php',
19581959
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php',
19591960
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\DataProviderArrayItemsNewLinedRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/DataProviderArrayItemsNewLinedRector.php',
19601961
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\EntityDocumentCreateMockToDirectNewRector' => $vendorDir . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php',
@@ -2030,6 +2031,7 @@
20302031
'Rector\\PHPUnit\\Enum\\PHPUnitAttribute' => $vendorDir . '/rector/rector-phpunit/src/Enum/PHPUnitAttribute.php',
20312032
'Rector\\PHPUnit\\Enum\\PHPUnitClassName' => $vendorDir . '/rector/rector-phpunit/src/Enum/PHPUnitClassName.php',
20322033
'Rector\\PHPUnit\\Enum\\ProphecyClassName' => $vendorDir . '/rector/rector-phpunit/src/Enum/ProphecyClassName.php',
2034+
'Rector\\PHPUnit\\Enum\\WebmozartClassName' => $vendorDir . '/rector/rector-phpunit/src/Enum/WebmozartClassName.php',
20332035
'Rector\\PHPUnit\\MethodCallRemover' => $vendorDir . '/rector/rector-phpunit/src/MethodCallRemover.php',
20342036
'Rector\\PHPUnit\\Naming\\TestClassNameResolver' => $vendorDir . '/rector/rector-phpunit/src/Naming/TestClassNameResolver.php',
20352037
'Rector\\PHPUnit\\NodeAnalyzer\\ArgumentMover' => $vendorDir . '/rector/rector-phpunit/src/NodeAnalyzer/ArgumentMover.php',

vendor/composer/autoload_static.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2215,6 +2215,7 @@ class ComposerStaticInit6374fd21a3f525a40760d79e3596b56b
22152215
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddInstanceofAssertForNullableInstanceRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/AddInstanceofAssertForNullableInstanceRector.php',
22162216
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\AddKeysExistsAssertForKeyUseRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/AddKeysExistsAssertForKeyUseRector.php',
22172217
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BareCreateMockAssignToDirectUseRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/BareCreateMockAssignToDirectUseRector.php',
2218+
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\BehatPHPUnitAssertToWebmozzartRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/BehatPHPUnitAssertToWebmozzartRector.php',
22182219
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\CreateMockToAnonymousClassRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/CreateMockToAnonymousClassRector.php',
22192220
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\DataProviderArrayItemsNewLinedRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/DataProviderArrayItemsNewLinedRector.php',
22202221
'Rector\\PHPUnit\\CodeQuality\\Rector\\ClassMethod\\EntityDocumentCreateMockToDirectNewRector' => __DIR__ . '/..' . '/rector/rector-phpunit/rules/CodeQuality/Rector/ClassMethod/EntityDocumentCreateMockToDirectNewRector.php',
@@ -2290,6 +2291,7 @@ class ComposerStaticInit6374fd21a3f525a40760d79e3596b56b
22902291
'Rector\\PHPUnit\\Enum\\PHPUnitAttribute' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/PHPUnitAttribute.php',
22912292
'Rector\\PHPUnit\\Enum\\PHPUnitClassName' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/PHPUnitClassName.php',
22922293
'Rector\\PHPUnit\\Enum\\ProphecyClassName' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/ProphecyClassName.php',
2294+
'Rector\\PHPUnit\\Enum\\WebmozartClassName' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Enum/WebmozartClassName.php',
22932295
'Rector\\PHPUnit\\MethodCallRemover' => __DIR__ . '/..' . '/rector/rector-phpunit/src/MethodCallRemover.php',
22942296
'Rector\\PHPUnit\\Naming\\TestClassNameResolver' => __DIR__ . '/..' . '/rector/rector-phpunit/src/Naming/TestClassNameResolver.php',
22952297
'Rector\\PHPUnit\\NodeAnalyzer\\ArgumentMover' => __DIR__ . '/..' . '/rector/rector-phpunit/src/NodeAnalyzer/ArgumentMover.php',

vendor/composer/installed.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,12 +1818,12 @@
18181818
"source": {
18191819
"type": "git",
18201820
"url": "https:\/\/github.com\/rectorphp\/rector-phpunit.git",
1821-
"reference": "18d0105081eb4a796eb54afab2bb9cbd82fdb1f0"
1821+
"reference": "90734bc90cd33af2785cf661d5684d9215a116f1"
18221822
},
18231823
"dist": {
18241824
"type": "zip",
1825-
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/18d0105081eb4a796eb54afab2bb9cbd82fdb1f0",
1826-
"reference": "18d0105081eb4a796eb54afab2bb9cbd82fdb1f0",
1825+
"url": "https:\/\/api.github.com\/repos\/rectorphp\/rector-phpunit\/zipball\/90734bc90cd33af2785cf661d5684d9215a116f1",
1826+
"reference": "90734bc90cd33af2785cf661d5684d9215a116f1",
18271827
"shasum": ""
18281828
},
18291829
"require": {
@@ -1850,7 +1850,7 @@
18501850
"tomasvotruba\/unused-public": "^2.2",
18511851
"tracy\/tracy": "^2.11"
18521852
},
1853-
"time": "2026-02-09T21:21:11+00:00",
1853+
"time": "2026-02-10T07:42:57+00:00",
18541854
"default-branch": true,
18551855
"type": "rector-extension",
18561856
"extra": {

vendor/composer/installed.php

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

vendor/rector/extension-installer/src/GeneratedConfig.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
*/
1010
final class GeneratedConfig
1111
{
12-
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 46e4f77'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main a110e2f'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 18d0105'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main e9008b6'));
12+
public const EXTENSIONS = array('rector/rector-doctrine' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-doctrine', 'relative_install_path' => '../../rector-doctrine', 'extra' => NULL, 'version' => 'dev-main 46e4f77'), 'rector/rector-downgrade-php' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-downgrade-php', 'relative_install_path' => '../../rector-downgrade-php', 'extra' => NULL, 'version' => 'dev-main a110e2f'), 'rector/rector-phpunit' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-phpunit', 'relative_install_path' => '../../rector-phpunit', 'extra' => NULL, 'version' => 'dev-main 90734bc'), 'rector/rector-symfony' => array('install_path' => '/home/runner/work/rector-src/rector-src/rector-build/vendor/rector/rector-symfony', 'relative_install_path' => '../../rector-symfony', 'extra' => NULL, 'version' => 'dev-main e9008b6'));
1313
private function __construct()
1414
{
1515
}
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
<?php
2+
3+
declare (strict_types=1);
4+
namespace Rector\PHPUnit\CodeQuality\Rector\ClassMethod;
5+
6+
use PhpParser\Node;
7+
use PhpParser\Node\Expr\StaticCall;
8+
use PhpParser\Node\Identifier;
9+
use PhpParser\Node\Name\FullyQualified;
10+
use PhpParser\Node\Stmt\ClassMethod;
11+
use Rector\PHPStan\ScopeFetcher;
12+
use Rector\PHPUnit\Enum\BehatClassName;
13+
use Rector\PHPUnit\Enum\PHPUnitClassName;
14+
use Rector\PHPUnit\Enum\WebmozartClassName;
15+
use Rector\Rector\AbstractRector;
16+
use Symplify\RuleDocGenerator\ValueObject\CodeSample\CodeSample;
17+
use Symplify\RuleDocGenerator\ValueObject\RuleDefinition;
18+
/**
19+
* @see \Rector\PHPUnit\Tests\CodeQuality\Rector\ClassMethod\BehatPHPUnitAssertToWebmozzartRector\BehatPHPUnitAssertToWebmozzartRectorTest
20+
*/
21+
final class BehatPHPUnitAssertToWebmozzartRector extends AbstractRector
22+
{
23+
/**
24+
* @var array<string, string>
25+
*/
26+
private const PHPUNIT_TO_WEBMOZZART_METHODS = [
27+
// Boolean
28+
'assertTrue' => 'true',
29+
'assertFalse' => 'false',
30+
// Null / empty
31+
'assertNull' => 'null',
32+
'assertNotNull' => 'notNull',
33+
'assertEmpty' => 'isEmpty',
34+
'assertNotEmpty' => 'notEmpty',
35+
// Type checks
36+
'assertIsString' => 'string',
37+
'assertIsInt' => 'integer',
38+
'assertIsFloat' => 'float',
39+
'assertIsBool' => 'boolean',
40+
'assertIsArray' => 'isArray',
41+
'assertIsObject' => 'object',
42+
'assertIsCallable' => 'isCallable',
43+
'assertIsResource' => 'resource',
44+
'assertIsIterable' => 'isIterable',
45+
'assertInstanceOf' => 'isInstanceOf',
46+
// Comparison / equality
47+
'assertSame' => 'same',
48+
'assertNotSame' => 'notSame',
49+
'assertEquals' => 'eq',
50+
'assertNotEquals' => 'notEq',
51+
'assertGreaterThan' => 'greaterThan',
52+
'assertGreaterThanOrEqual' => 'greaterThanEq',
53+
'assertLessThan' => 'lessThan',
54+
'assertLessThanOrEqual' => 'lessThanEq',
55+
// Strings
56+
'assertStringContainsString' => 'contains',
57+
'assertStringNotContainsString' => 'notContains',
58+
'assertStringStartsWith' => 'startsWith',
59+
'assertStringStartsNotWith' => 'notStartsWith',
60+
'assertStringEndsWith' => 'endsWith',
61+
'assertStringEndsNotWith' => 'notEndsWith',
62+
'assertMatchesRegularExpression' => 'regex',
63+
// Arrays / count
64+
'assertCount' => 'count',
65+
'assertArrayHasKey' => 'keyExists',
66+
'assertArrayNotHasKey' => 'keyNotExists',
67+
// Misc / less direct
68+
'assertFileExists' => 'fileExists',
69+
'assertFileIsReadable' => 'readable',
70+
'assertDirectoryExists' => 'directory',
71+
];
72+
/**
73+
* @var string[]
74+
*/
75+
private const FLIPPED_ARGS = ['assertSame', 'assertNotSame', 'assertEquals', 'assertNotEquals', 'assertGreaterThan', 'assertGreaterThanOrEqual', 'assertLessThan', 'assertLessThanOrEqual', 'assertCount', 'assertContains', 'assertNotContains'];
76+
public function getRuleDefinition(): RuleDefinition
77+
{
78+
return new RuleDefinition('Change PHPUnit assert in Behat context files to Webmozart Assert, as first require a TestCase instance', [new CodeSample(<<<'CODE_SAMPLE'
79+
use Behat\Behat\Context\Context;
80+
use PHPUnit\Framework\Assert;
81+
82+
final class SomeContext implements Context
83+
{
84+
public function someMethod()
85+
{
86+
Assert::assertSame('expected', 'actual');
87+
}
88+
}
89+
CODE_SAMPLE
90+
, <<<'CODE_SAMPLE'
91+
use Behat\Behat\Context\Context;
92+
use Webmozart\Assert\Assert;
93+
94+
final class SomeContext implements Context
95+
{
96+
public function someMethod()
97+
{
98+
Assert::same('actual', 'expected');
99+
}
100+
}
101+
CODE_SAMPLE
102+
)]);
103+
}
104+
/**
105+
* @return array<class-string>
106+
*/
107+
public function getNodeTypes(): array
108+
{
109+
return [ClassMethod::class];
110+
}
111+
/**
112+
* @param ClassMethod $node
113+
*/
114+
public function refactor(Node $node): ?ClassMethod
115+
{
116+
$scope = ScopeFetcher::fetch($node);
117+
if (!$scope->isInClass()) {
118+
return null;
119+
}
120+
$classReflection = $scope->getClassReflection();
121+
if (!$classReflection->is(BehatClassName::CONTEXT)) {
122+
return null;
123+
}
124+
$hasChanged = \false;
125+
$this->traverseNodesWithCallable($node, function (Node $node) use (&$hasChanged): ?StaticCall {
126+
if (!$node instanceof StaticCall) {
127+
return null;
128+
}
129+
if (!$this->isName($node->class, PHPUnitClassName::ASSERT)) {
130+
return null;
131+
}
132+
$phpunitMethodName = $this->getName($node->name);
133+
if ($phpunitMethodName === null) {
134+
return null;
135+
}
136+
// changed method name
137+
$webmozartMethodName = self::PHPUNIT_TO_WEBMOZZART_METHODS[$phpunitMethodName] ?? null;
138+
if ($webmozartMethodName === null) {
139+
return null;
140+
}
141+
if (in_array($phpunitMethodName, self::FLIPPED_ARGS, \true) && count($node->args) >= 2) {
142+
// flip first 2 args
143+
$temp = $node->args[0];
144+
$node->args[0] = $node->args[1];
145+
$node->args[1] = $temp;
146+
}
147+
$node->class = new FullyQualified(WebmozartClassName::ASSERT);
148+
$node->name = new Identifier($webmozartMethodName);
149+
$hasChanged = \true;
150+
return $node;
151+
});
152+
if (!$hasChanged) {
153+
return null;
154+
}
155+
return $node;
156+
}
157+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
declare (strict_types=1);
4+
namespace Rector\PHPUnit\Enum;
5+
6+
final class WebmozartClassName
7+
{
8+
/**
9+
* @var string
10+
*/
11+
public const ASSERT = 'Webmozart\Assert\Assert';
12+
}

0 commit comments

Comments
 (0)