Repository navigation
Bugfixes and safer reprints 🐛
This release is mostly about bugfixes - an infinite loop fix in docblock return types, kept ternary parentheses on null coalescing, more precise changed_files in JSON output, and several new skips for dead code and PHP 8.4 rules. On the extension side, PHPUnit AddDoesNotPerformAssertionToNonAssertingTestRector is now faster and more precise.
Bugfixes 🐛
- [TypeDeclarationDocblocks] Skip invalid
@returntag to fix infinite loop inDocblockReturnArrayFromDirectArrayInstanceRector(#8918) - [ChangesReporting] List only changed files in JSON
changed_files(#8917) Thanks @gvieira18 - [Core] Drop file positions on reprinted nodes copied from another file (#8928)
- Preserve ternary fallback parentheses in new coalesces (#8927) Thanks @smotim
- [Php70] Keep inner ternary parentheses on
TernaryToNullCoalescingRector(#8921) - [Php55] Handle variable interpolated in pattern on
PregReplaceEModifierRector(#8922) - [Php84] Skip variable modified in condition on
ForeachToArrayAllRector,ForeachToArrayAnyRector,ForeachToArrayFindRectorandForeachToArrayFindKeyRector(#8925) - [DeadCode] Skip conditional return type on
RemoveUselessReturnTagRector(#8924) Thanks @APX403 - [DeadCode] Skip private methods used as callables on
RemoveUnusedPrivateMethodParameterRector(#8923) Thanks @phinor - [CodingStyle] Skip closure with rebound
$thisonArrowFunctionDelegatingCallToFirstClassCallableRectorandClosureDelegatingCallToFirstClassCallableRector(#8931)
Performance Improvements 🚀
- Remove usage of
CloningVisitoronAstResolver(#8861)
Internals ⚙️
- [Printer] Remove unneeded
BetterStandardPrinter::pStmt_FileNode()(#8904) - [CodingStyle] Cover Doctrine/Symfony aliased names on import names with real stubs (#8932, #8933)
rector-symfony 🎵
- [Symfony61] Do not add
#[AsCommand]without a name inCommandConfigureToAttributeRector(#1102) Thanks @kix - Skip first-class callable in
CommandConfigureToAttributeRector(#1104)
rector-phpunit 🟢
- [PHPUnit90] Handle named and unpacked
preg_match()args and skip non-literal expected value inAssertRegExpRector(#820, #819) Thanks @alies-dev - [PHPUnit100] Add
willReturnOnConsecutiveCalls()variables to closureuse()inWithConsecutiveRector(#821) - [PHPUnit120] Skip mocks configured through an alias in
ExpressionCreateMockToCreateStubRector(#823) Thanks @bbrala - [PHPUnit60] Follow
parent::test()calls inAddDoesNotPerformAssertionToNonAssertingTestRector(#826) Thanks @bbrala - [PHPUnit60] Count
expectUserDeprecationMessage()as assert, skip test methods in abstract classes and skip tests in classes with own asserting lifecycle methods inAddDoesNotPerformAssertionToNonAssertingTestRector(#825, #828, #831) - [PHPUnit60] Speed up
AddDoesNotPerformAssertionToNonAssertingTestRector- change node toClass_, cachecontainsAssertCall()per node and never parse PHPUnit and Symfony base test case methods (#830, #829, #833, #824)
rector-downgrade-php ⬇️
- Fix class constant spread from other class crash on
DowngradeArraySpreadRector(#423)