New Features 🎉
- [Core] AbstractScopeAwareRector is ready to be used in custom rules (#2537)
- [PHP 8.1] Add FirstClassCallableRector (#2544)
- [Php81] NullToStrictStringFuncCallArgRector - Register more functions (#2543), Thanks @hungtrinh!
- Improve RectorConfig import methods (#2526), Thanks @alexndlm!
Bugfixes 🐛
- [Renaming] Do not rename docblock same name not found in use inside namespace (#2471)
- [TypeDeclaration] Skip generic on ReturnTypeDeclarationRector (#2469)
- [DeadCode] Skip using coealesce assign operator on return on RemoveUnusedPrivatePropertyRector (#2476)
- [DeadCode] Skip has return reassign Coalesce Op on RemoveUnusedPrivatePropertyRector (#2477)
- [Php55] Handle crash on concat variable single quote on PregReplaceEModifierRector (#2483)
- [PSR4] Handle invalid missing ; on NormalizeNamespaceByPSR4ComposerAutoloadRector with GroupUse (#2488)
- [Php70] Refactor MultiDirnameRector by moving nestingLevel check to separate method (#2492)
- [Php81] Fix crash on redis->set() on ReadOnlyPropertyRector (#2494)
- [TypeDeclaration] Skip implements mixed, and already has typed return on AddReturnTypeDeclarationRector (#2509)
- [Php81] Skip param reassign on ReadOnlyPropertyRector (#2498)
- [CodeQuality] Fix default array param in CallableThisArrayToAnonymousFunctionRector (#2527)
- [Transform] Handle with this->method() from current class on MethodCallToMethodCallRector (#2531)
- [PHP 7.0] skip non-existing method in StaticCallOnNonStaticToInstanceCallRector (#2532)
- [PHP 7.4] Skip default expr type on property, if there is mixed assign (#2534)
- [Php56] Skip multiple catch with same variable on AddDefaultValueForUndefinedVariableRector (#2533)
- [Php80] Skip Assign on its var not directly used in next return on ChangeSwitchToMatchRector (#2535), #7247
- [Php81] Skip str_replace() pass array subject on NullToStrictStringFuncCallArgRector (#2541)