Skip to content

chore(deps): update composer dev tooling dependencies#14

Open
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/composer-dev-tooling
Open

chore(deps): update composer dev tooling dependencies#14
renovate[bot] wants to merge 1 commit into
masterfrom
renovate/composer-dev-tooling

Conversation

@renovate

@renovate renovate Bot commented Jan 15, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
lendable/composer-license-checker ^1.3^1.4.0 age confidence
php-cs-fixer/shim ^3.92^3.95.12 age confidence
rector/rector (source) ^2.3^2.5.5 age confidence

Release Notes

Lendable/composer-license-checker (lendable/composer-license-checker)

v1.4.0

Compare Source

Features
Fixes / Maintenance
PHP-CS-Fixer/shim (php-cs-fixer/shim)

v3.95.12

Compare Source

v3.95.11

Compare Source

v3.95.10

Compare Source

v3.95.9

Compare Source

v3.95.8

Compare Source

v3.95.7

Compare Source

v3.95.6

Compare Source

v3.95.5

Compare Source

v3.95.4

Compare Source

v3.95.3

Compare Source

v3.95.2

Compare Source

v3.95.1

Compare Source

v3.95.0

Compare Source

v3.94.2

Compare Source

v3.94.1

Compare Source

v3.94.0

Compare Source

v3.93.1

Compare Source

v3.93.0

Compare Source

rectorphp/rector (rector/rector)

v2.5.5: Released Rector 2.5.5

Compare Source

New Features 🥳

  • [CodingStyle] Add AlternativeIfToBracketRector (#​8158)
  • [TypeDeclaration] Add PrivateMethodReturnTypeFromStrictNewArrayRector, split private methods out (#​8153)
  • [CodeQuality] Decopule array and object variants from ExplicitBoolCompareRector (#​8162)

Bugfixes 🐛

  • [TypeDeclaration] Fix AddClosureParamTypeForArrayMapRector to type closure params from array values, not keys (#​8163)
  • [Php56] Add missing parentheses for lower-precedence operands in PowToExpRector (#​8161)
  • [Php80] Keep trailing doc comment after annotation in AnnotationToAttributeRector (#​8160)
  • [CodeQuality] Skip same boolean in both branches in SimplifyIfReturnBoolRector (#​8159)
  • [CodeQuality] Skip alternative syntax (if/endif) in ShortenElseIfRector (#​8157)
  • [EarlyReturn] Split nested && operand into its own early return in ReturnBinaryOrToEarlyReturnRector (#​8156)
  • [CodeQuality] Preserve parentheses around low-precedence operands in LogicalToBooleanRector (#​8155)
  • [CodeQuality] Skip inner function referenced as string callable in InnerFunctionToPrivateMethodRector (#​8154)
  • [CodeQuality] Preserve parentheses around right-side assign in LogicalToBooleanRector (#​8152)
  • [CodeQuality] Wrap assign on right side of binary op in parentheses in LogicalToBooleanRector (#​8151)
  • [DeadCode] Keep generic static union docblock in RemoveDuplicatedReturnSelfDocblockRector (#​8150)

v2.5.4: Released Rector 2.5.4

Compare Source

New Features 🥳

  • [TypeDeclaration] Add ReturnTypeFromGetRepositoryDocblockRector (#​8146)

Bugfixes 🐛

  • [DeadCode] Keep generic @​ var/@​ return self<...> narrowing annotations (#​8147)
  • [TypeDeclaration] Handle getRepository() return via local variable in ReturnTypeFromGetRepositoryDocblockRector (#​8148)

v2.5.3: Released Rector 2.5.3

Compare Source

New Features 🥳

withTypeGuardedClasses()

Are you an open-source project or package used by others? Do you want to make type changes, but keep BC?

Guard the listed classes and their non-final descendants against method signature changes - e.g. adding a return type or a param type — that would break child classes (#​8135)

return RectorConfig::configure()
    ->withTypeGuardedClasses([SomeContract::class]);

New Rules 🎉

NegatedAndsToPositiveOrsRector

(CodeQuality) — simplify a negated "and" to "or" via de Morgan (#​8082)

 $a = 5;
 $b = 10;
-$result = !($a > 20 && $b <= 50);
+$result = $a <= 20 || $b > 50;

ExplicitAttributeNamedArgsRector

(CodeQuality) — positional attribute args → named args (#​8079), Thanks @​DaveLiddament!

-#[SomeAttribute(SomeClass::class, null, ['home'])]
+#[SomeAttribute(value: SomeClass::class, only: null, except: ['home'])]
 class SomeClass
 {
 }

SwitchTrueToMatchRector

(CodeQuality) — switch (true) of returning cases → match (true), replaces deprecated SwitchTrueToIfRector (#​8113)

-        switch (true) {
-            case $value === 0:
-                return 'no';
-            case $value === 1:
-                return 'yes';
-            default:
-                return 'maybe';
-        }
+        return match (true) {
+            $value === 0 => 'no',
+            $value === 1 => 'yes',
+            default => 'maybe',
+        };

RemoveDuplicatedReturnSelfDocblockRector

(DeadCode) — drop @return duplicating native self/static (#​8087)

 final class SomeClass
 {
-    /**
-     * @&#8203;return $this
-     */
     public function some(): self
     {
         return $this;
     }
 }

RemoveMixedDocblockOverruledByNativeTypeRector

(DeadCode) — drop @param mixed / @return mixed overruled by native type (#​8089)

-    /**
-     * @&#8203;param mixed $value
-     * @&#8203;return mixed
-     */
     public function run(int $value): string
     {
     }

RemoveUselessUnionReturnDocblockRector

(DeadCode) — drop @return union broader than a specific native type (#​8126)

-    /**
-     * @&#8203;return bool|mixed|string
-     */
     public function run(): false|string
     {
     }

ClosureReturnTypeFromAssertInstanceOfRector

(TypeDeclaration) — add closure return type narrowed by assertInstanceOf() (#​8115)

-        $callback = function (object $object) {
+        $callback = function (object $object): SomeType {
             $this->assertInstanceOf(SomeType::class, $object);
     return $object;
 };


TypedPropertyFromContainerGetSetUpRector

(TypeDeclaration) — type property from @var when assigned via container get() in setUp() (#​8120)

-    /**
-     * @&#8203;var SomeService
-     */
-    private $someService;
+    private SomeService $someService;

     protected function setUp(): void
     {
         $this->someService = static::getContainer()->get(SomeService::class);
     }

TypedPropertyFromGetRepositorySetUpRector

(TypeDeclaration) — same, for getRepository() assignment in setUp() (#​8124)

-    /**
-     * @&#8203;var SomeEntityRepository
-     */
-    private $someEntityRepository;
+    private SomeEntityRepository $someEntityRepository;

protected function setUp(): void
{
$this->someEntityRepository = $this->em->getRepository(SomeEntity::class);
}



NarrowBoolDocblockReturnTypeRector

(TypeDeclaration) — narrow @return bool to false/true per native type (#​8127)

     /**
-     * @&#8203;return bool|string[]
+     * @&#8203;return false|string[]
      */
     public function run(): false|array

NarrowArrayCollectionUnionReturnDocblockRector

(TypeDeclarationDocblocks) — Type[]|ArrayCollection → generic ArrayCollection<int, Type> (#​8136)

     /**
-     * @&#8203;return LeadEventLog[]|ArrayCollection
+     * @&#8203;return ArrayCollection<int, LeadEventLog>
      */
     public function getSuccessful(): ArrayCollection

AddClosureParamTypeFromVariableCallRector

(TypeDeclaration) — add closure param type from how the closure variable is called (#​8142)

-$printItem = function ($item) {
+$printItem = function (Item $item) {
     echo $item->name;
 };

$printItem(new Item());

rectorphp/rector-symfony 🎵
EventSubscriberMethodReturnVoidRector

(CodeQuality) — subscribed event methods must return void (event is by-reference) (#​949)

-    public function onEvent(Event $event): Event
+    public function onEvent(Event $event): void
     {
-        return $event->setSomething('value');
+        $event->setSomething('value');
     }

rectorphp/rector-phpunit 🟢

PHPUnit 12 cluster — typing createMock() / createStub() properties as intersections after the MockObjectStub split.

ChangeMockObjectReturnUnionToIntersectionRector

(CodeQuality) — MockObject @return union → intersection (#​703)

     /**
-     * @&#8203;return Event|\PHPUnit\Framework\MockObject\MockObject
+     * @&#8203;return Event&\PHPUnit\Framework\MockObject\MockObject
      */
     private function createEvent(): \PHPUnit\Framework\MockObject\MockObject

AddIntersectionVarToMockObjectPropertyRector

(CodeQuality) — add MockObject intersection @var to a native MockObject property (#​697)

+    /**
+     * @&#8203;var \PHPUnit\Framework\MockObject\MockObject&\SomeService
+     */
     private \PHPUnit\Framework\MockObject\MockObject $someServiceMock;

AddStubIntersectionVarToStubPropertyRector

(CodeQuality) — add Stub intersection @var to a native Stub property (#​700)

+    /**
+     * @&#8203;var \PHPUnit\Framework\MockObject\Stub&\SomeService
+     */
     private \PHPUnit\Framework\MockObject\Stub $someServiceStub;

MockObjectVarToStubRector

(PHPUnit120) — on a property retyped to Stub, update @var from MockObject to Stub (#​689)

 /**
- * @&#8203;var FieldModel|MockObject
+ * @&#8203;var FieldModel|\PHPUnit\Framework\MockObject\Stub
  */
 private \PHPUnit\Framework\MockObject\Stub $leadFieldModel;

BareVarToStubIntersectionRector

(PHPUnit120) — add &Stub to a bare single-class @var of a Stub property (#​690)

 /**
- * @&#8203;var FormBuilderInterface
+ * @&#8203;var FormBuilderInterface&Stub
  */
 private \PHPUnit\Framework\MockObject\Stub $formBuilder;

PreferTestsWithCamelCaseRector

(CodeQuality) — rename PHPUnit test methods to camelCase (#​668), Thanks @​Xammie!

-    public function test_something()
+    public function testSomething()
     {
     }

PreferTestsWithSnakeCaseRector

(CodeQuality) — rename PHPUnit test methods to snake_case, the opposite convention (#​668), Thanks @​Xammie!

-    public function testSomething()
+    public function test_something()
     {
     }

Bugfixes 🐛

  • --only / --only-suffix runs now cache under a rule-scoped key (#​8075), Thanks @​SanderMuller!
  • Fix double clear-cache (#​8096)
  • ParamTypeByMethodCallTypeRector split into Object / Scalar / Array rules (#​8134)

Deprecations & Removals 💀

Migrate away - these will be removed in a future release:

  • SwitchTrueToIfRector → use new SwitchTrueToMatchRector (#​8109)
  • StrictStringParamConcatRector — too many false positives (#​8090)
  • StaticClosureRector + StaticArrowFunctionRector (#​8092)
  • StaticCallOnNonStaticToInstanceCallRector — risky change (#​8093)
  • EnumCaseToPascalCaseRector — risky change (#​8095)
  • JoinStringConcatRector (#​8107)
  • RemoveTypedPropertyNonMockDocblockRector — no real value (#​8119)
  • Removed: long-deprecated rules (5+ months old) (#​8094)

rectorphp/rector-symfony

  • ParameterBagToAutowireAttributeRector (#​954)
  • AddRouteAnnotationRector (#​952)

rectorphp/rector-phpunit

  • BehatPHPUnitAssertToWebmozartRector — too narrow (#​686)

v2.5.2: Released Rector 2.5.2

Compare Source

Bugfixes 🐛

  • Match class + path in unused-skip reporting — fix combined class => [paths] skips being wrongly flagged as unused (#​8073)
  • Mark skip used only when rule would change the file — a class/path skip counts as "used" only if the rule would actually touch that file, killing false "used" hits (#​8076)
  • Improve unused-skip resolver methods — cleaner resolution internals (#​8072)
  • Track used skips as class => [paths] map — richer per-path skip tracking backing the report (#​8074)

v2.5.1: Released Rector 2.5.1

Compare Source

Bugfixes 🐛

  • Skip unused-skip reporting on narrowed runs - no more false "unused skip" noise when running Rector on a subset of paths (#​8069)
  • Display skips only on uncached run - skip report shows on real runs, not when results come from cache (#​8071)
  • RemoveAlwaysTrueIfConditionRector — avoid scanning whole new statements on dynamic variable checks; moved logic to ExprAnalyzer and bail early on defined variables (#​8057)

v2.5.0: Released Rector 2.5

Compare Source

New Features 🥳 🎉 🎉 🎉

This release has 3 interesting new features. Let's look at them:

[dx] Report skips that never matched (#​8058)
  • What? - like PHPStan's reportUnusedIgnores, but for Rector ->withSkip(). Flags skip entries that never matched anything during the run, so you can delete stale skips.

  • Why? - skips rot. You skip a path/rule to dodge a problem, later the file moves or the rule stops firing there — the skip lingers forever,
    silently masking nothing. This surfaces dead skips so config stays honest.

// rector.php
return RectorConfig::configure()
    ->withSkip([
        SimplifyUselessVariableRector::class => [
            '*/src/Legacy/*',          // still matches — fine
            '*/NonexistentUnused/*',   // matches nothing — stale
        ],
    ])
    ->reportUnusedSkips();

Run output:

 [OK] Rector is done!
  
 [WARNING] This skip is unused, it never matched any element.
           You can remove it from "->withSkip()"

 * Rector\CodeQuality\Rector\FunctionLike\SimplifyUselessVariableRector => */NonexistentUnused/*

[dx] Removing unused imports by default (#​8047)

You can update your rector.php config:

 return RectorConfig::configure()
-    ->withImportNames(removeUnusedImports: true);
+    ->withImportNames();

In case it's not for you, turn it off:

 return RectorConfig::configure()
-    ->withImportNames();
+    ->withImportNames(removeUnusedImports: false);

[dx] Introducing Drupal composer-based sets (#​8041), Thanks @​bbrala!

If you're using Drupal Rector, you can now enable it's per-version sets via:

 return RectorConfig::configure()
+    ->withComposerBased(drupal: true);

To learn more about composer-based-sets, checkout the documentation.


New Rules 🎉
  • [php 8.4] [type-declaration] Add AddArrayAnyAllClosureParamTypeRector and NarrowArrayAnyAllNullableParamTypeRector (#​8049)
  • [code-quality] Add MoveInnerFunctionToTopLevelRector (#​8042)
  • [code-quality] Add NewArrayItemConcatAssignToAssignRector (#​8045)
  • [code-quality] Add FixClassCaseSensitivityVarDocblockRector (#​8046)
  • [polyfills] add missing polyfill to PHP 8.4 array functions (#​8052)
  • [rector] Add AddParamTypeToRefactorMethodRector if missing (#​8061)

Bugfixes 🐛

  • [internal] Streamline use imports management to FileNode (#​8040)
  • [PostRector] Do not keep an unused import matched only by a partial docblock name's tail (#​8043), Thanks @​ruudk!
  • [CodeQuality] Skip native function on MoveInnerFunctionToTopLevelRector (#​8044)
  • Fix --only runs caching files as unchanged, hiding pending changes from full runs (#​8029), Thanks @​SanderMuller!
  • [fix] Fix RemoveUnusedPrivateMethodRector for NeverType (#​8050)
  • [dead-code] Fix RemoveUnusedVariableAssignRector, allow for SplFileInfo as cleanup on purpose for gc (#​8054)
  • [fixes] Couple ClassPropertyAssignToConstructorPromotionRector, RemoveAlwaysTrueIfConditionRector and RemoveUnusedVariableAssignRector fixes (#​8055)
  • [TypeDeclaration][DeadCode] Skip class with Doctrine static function mapping (loadMetadata) in TypedPropertyFromAssignsRector and RemoveUnusedPrivatePropertyRector (#​8059)
  • [TypeDeclaration] Skip class with Doctrine static function mapping (loadMetadata) in TypedPropertyFromStrictConstructorRector (#​8060)

rectorphp/rector-doctrine 🟠

  • [NodeAnalyzer] Detect Doctrine static function mapping (loadMetadata) entity in DoctrineEntityDetector (736bf61)

v2.4.6: Released Rector 2.4.6

Compare Source

New Features 🥳

  • [deprecation] Add RenameDeprecatedMethodCallRector inferring rename from @​deprecated docblock (#​8015)
  • [sets] kick of named args set (#​8013)
# rector.php
return (RectorConfig::configure())
    ->withPreparedSets(namedArgs: true);

Bugfixes 🐛

  • [BetterPhpDocParser] Keep import referenced by @​see/@​uses tag with a trailing description (#​8039), Thanks @​ruudk!
  • [internals] skip and finalize beforeTraverse() and afterTraverse() as never used, use refactor() instead (#​7765)
  • [DeadCode] Skip (void) cast with #[NoDiscard] on target method call on RemoveDeadStmtRector (#​8038)
  • Bump composer/pcre to ^3.4.0 and phpstan/phpstan to ^2.2.2 (#​8037)
  • [CodeQuality] Handle crash on custom exception not autoloaded on ThrowWithPreviousExceptionRector (#​8036)
  • refactor: extract AutoloadFileParameterResolver from bin, add tests (#​8035), Thanks @​SanderMuller!
  • Fix cached results surviving a change of --autoload-file (#​8034), Thanks @​SanderMuller!
  • [CodingStyle] Remove AstResolver usage on ArrowFunctionAndClosureFirstClassCallableGuard (#​8031)
  • [DeadCode] Remove AstResolver on RemoveParentCallWithoutParentRector (#​8032)
  • [DeadCode] Skip with use of func_num_args() on RemoveNullArgOnNullDefaultParamRector (#​8030)
  • [Php70] Skip rewriting to $this on static method or static closure on StaticCallOnNonStaticToInstanceCallRector (#​8026)
  • [ci] add compat test (#​8025)
  • Fix ReplaceArgumentDefaultValueRector generating invalid self:: constant in unrelated classes (#​8023)
  • Fix RemoveDeadIfBlockRector dropping else block when merging empty if with elseif (#​8022)
  • Fix RemoveParentCallWithoutParentRector removing valid call when ancestor hierarchy is unresolvable (#​8018)
  • split of RemoveNullNamedArgOnNullDefaultParamRector to handle only named args (#​8014)
  • Add failing tests (#​8012), Thanks @​u01jmg3!
  • Update rector/swiss-knife version to ^2.4.1 (#​8011)

rectorphp/rector-symfony 🎶

  • [Symfony81] Add new rule for deprecated validator test usages (#​948), Thanks @​florianhofsaessC24!
  • fix: only convert Twig extensions fully reducible to AsTwig attributes (#​947)
  • [Symfony73] Sort optional parameters last in InvokableCommandInputAttributeRector (#​945)
  • Add PHPStan rule requiring nested set configs to be imported in parent set config (#​943)
  • [Symfony81] Add new rule for Security component (#​942), Thanks @​MrYamous!
  • Remove unused imports (#​941), Thanks @​MrYamous!
  • [Symfony81] Add new rule for Filesystem (#​940), Thanks @​MrYamous!

rectorphp/rector-phpunit 🟢

  • [PHPUnit12] Handle crash on property not exists on PropertyCreateMockToCreateStubRector (#​681)
  • [AnnotationsToAttributes] Convert external @​depends ClassName::method to #[DependsExternal] (#​679)
  • [PHPUnit12] Drop ConstraintValidatorTestCase from AllowMockObjectsWhereParentClassRector triggers (#​678)

rectorphp/rector-downgrade-php ⬇️

  • Add DowngradeDomNodeChildNodesForeachRector for null $childNodes before PHP 8.0 (#​379)
  • Update boundwize/structarmed version to ^0.9 (#​378)
  • Fix use of existing PhpAttributeAnalyzer service on AddReturnTypeWillChangeAttributeRector (#​377)
  • Remove no longer exists '--ansi' flag from swiss-knife (#​376)
  • [DowngradePhp81] Add AddReturnTypeWillChangeAttributeRector (#​372), Thanks @​jquiaios!

v2.4.5: Released Rector 2.4.5

Compare Source

New Features 🥳

Bugfixes 🐛
  • fix: skip StaticCallToMethodCallRector when parent declares final __construct (#​8001)
  • [NodeManipulator] Use ClassReflection parent isFinalByKeyword()->yes() on ClassDependencyManipulator (#​8002)
  • [BetterPhpDocParser] Don't wrap first-position @​method param union in extra parens (#​8003), Thanks @​kyle-bisnow!
  • [ci] kick of auto issue fixer (#​8004)
  • [automated] Apply Coding Standard (#​8005)
  • [CodeQuality] Skip possibly undefined variable on SimplifyEmptyCheckOnEmptyArrayRector (#​8006)
  • [CodingStyle] Handle namespaced function string on FunctionFirstClassCallableRector (#​8007)
  • Fix compatibility on optional key on array dim fetch to be Mixed on phpstan patch 2.1.x-dev (#​8008)
  • Update Mongodb constant from DoctrineSetList (#​8009)
  • Bump to PHPStan ^2.1.56 (#​8010)
rectorphp/rector-symfony
rectorphp/rector-doctrine
  • [QA] Add StructArmed to QA (#​482)
rectorphp/rector-phpunit
  • [QA] Add StructArmed to QA (#​677)
  • fix assert call type resolving (#​675)
  • fix AssertIsTypeMethodCallRector crash on enum case argument (#​674)
rectorphp/rector-downgrade-php
  • [QA] Add StructArmed to QA (#​375)

v2.4.4: Released Rector 2.4.4

Compare Source

New Features 🥳
  • [QA] Add StructArmed to QA (#​7989)
  • feat: create rector to add names to boolean arguments (#​7944), Thanks @​calebdw!
  • [CodeQuality] Add missing MinPhpVersionInterface implements on AddNameToBooleanArgumentRector (#​7994)
  • [injection] If parent class has dependency via promoted property, but its private, add a new one to child class deps (#​7996)

Bugfixes 🐛
  • Bump structarmed to ^0.6 (#​7990)
  • [Php81] Skip NullToStrictStringFuncCallArgRector for magic __get() property access resolving to ErrorType (#​7992)
  • [automated] Apply Coding Standard (#​7993)
  • [TypeDeclarationDocblocks] Skip overridden methods in DocblockReturnArrayFromDirectArrayInstanceRector (#​7995)
  • Fix compatibility with latest phpstan patch 2.1.x-dev (#​7997)
  • Temporary pin webmozart/assert to 2.3.0 to make downgrade working (#​7998)
  • Bump webmozart/assert to ^2.4 (#​7999)

Removed 💀
  • [DeadCode] Skip used by get_object_vars on RemoveUnusedPromotedPropertyRector (#​7988)
rectorphp/rector-symfony
  • add fixture with failing parent private (#​935)
  • fix ControllerMethodInjectionToConstructorRector - update call sites when params are moved to constructor (#​934)
rectorphp/rector-downgrade-php
  • [DowngradePhp82] Handle nullable true on DowngradeStandaloneNullTrueFalseReturnTypeRector (#​374)

v2.4.3: Released Rector 2.4.3

Compare Source

New Features 🥳

Bugfixes 🐛
  • Fix the behavior of ClassPropertyAssignToConstructorPromotionRector when types do not match (#​7972), Thanks @​mspirkov!
  • Rectify (#​7973)
  • Bump crate-ci/typos from 1.44.0 to 1.46.0 (#​7976), Thanks @​dependabot[bot]!
  • [CodeQuality] Skip union type on UseIdenticalOverEqualWithSameTypeRector (#​7975)
  • [CodingStyle] Mirror comment on SplitDoubleAssignRector (#​7977)
  • [phpstan] remove copuel fixed phpstan ignores (#​7979)
  • trigger code analysis on main (rectorphp/rector-src@adb24d0)
  • [CodeQuality] Skip in html for ForRepeatedCountToOwnVariableRector (#​7981)
  • Clean up PHPStan ignoreErrors (#​7982)
  • Fix typo namespace Sourde -> Source in rules-tests/TypeDeclarationDocblocks (#​7983)
  • cs (rectorphp/rector-src@7805989)
  • [Naming] Handle rename with use after anonymous class on RenameParamToMatchTypeRector (#​7984)
  • [DX] Fix run on custom rector config when no rector.php (#​7985)
  • Temporary pin nette/utils version to 4.1.3 (#​7986)
  • Bump to nette/utils ^4.1.4 (#​7987)

Removed 💀
  • [remove] Remove deprecated StmtsAwareInterface (#​7978)
  • [remove] Remove deprecated FileWithoutNamespace and ScopeResolverNodeVisitorInterface (#​7980)
  • remove docker-metadata files, as no longer maintained (rectorphp/rector-src@2166603)
rectorphp/rector-symfony
  • [symfony 2.4] skip no-route in GetRequestRector (#​933)
  • fix(CommandHelpToAttributeRector): support concatenated string in setHelp() (#​932), Thanks @​androshchuk
rectorphp/rector-phpunit
  • [CodeQuality] Handle on static closure on WithCallbackIdenticalToStandaloneAssertsRector (#​672)
  • ReplaceTestAnnotationWithPrefixedFunctionRector does not match @​ test annotation if it is being part of string (#​671), Thanks @​Dukecz
  • [PHPUnit12] Skip used as next arg with MockObject Type on ExpressionCreateMockToCreateStubRector (#​670)
  • [CodeQuality] Skip multiple uses variable as arg after defined on BareCreateMockAssignToDirectUseRector (#​669)
rectorphp/rector-downgrade-php
  • [DowngradePhp80] Handle combine DowngradeMixedTypeDeclarationRector+DowngradeAttributeToAnnotationRector on declare(strict_types=1) inline after open php tag (#​373)
  • remove FileWithoutNamespace (#​371)
  • Fix phpstan notice on latest phpstan (#​370)

v2.4.2: Released Rector 2.4.2

Compare Source

New Features 🥳
  • Add some symfony/polyfill support (#​7965), Thanks @​sreichel!
  • [DeadCode] Allow remove useless @​ var on aliased object on RemoveUselessVarTagRector (#​7967)

Bugfixes 🐛
  • [Php81] Handle crash on normal array with variadic inside class on ArrayToFirstClassCallableRector (#​7966)
  • [CodeQuality] Skip possibly undefined variable on CoalesceToTernaryRector (#​7968)
  • [Php70] Allow is_null() conversion on TernaryToNullCoalescingRector with parentheses handling (#​7969)
  • Bump to PHPStan ^2.1.47 (#​7970)
  • Bump to PHPStan ^2.1.48 (#​7971)

rectorphp/rector-symfony 🎵
  • Fix unit test due to new PHPStan release (#​931)

v2.4.1: Released Rector 2.4.1

Compare Source

New Features 🥳

Bugfixes 🐛
  • [CodeQuality] Skip with HTML on CompleteMissingIfElseBracketRector (#​7952)
  • [CodeQuality] Handle with assign on SimplifyIfElseToTernaryRector (#​7951)
  • [CodeQuality] Skip with HTML on TernaryFalseExpressionToIfRector (#​7954)
  • [automated] Apply Coding Standard (#​7955)
  • Make compatible with PHPStan 2.1.x-dev for ObjectType::equals() change behaviour (#​7956)
  • [AutoImport] Handle FQCN in/not in use on auto import + remove unused import as prefix = suffix (#​7957)
  • perf: use hash map for installed packages (#​7878), Thanks @​calebdw!
  • [ChangesReporting][Alternative] Collect changed_files on --no-diffs with json output with use of JsonOutputFactory (#​7821)
  • fix: OOM crash in RemoveUnusedVariableAssignRector (#​7964), Thanks @​calebdw!

Deprecations 💀
  • [Php81] Deprecate NewInInitializerRector as depends on context (#​7913)
  • [deprecation] deprecate file, use getFile() instead (#​7962)

v2.4.0: Released Rector 2.4.0

Compare Source

New Features 🥳


Bugfixes 🐛

  • [Php85] Do not convert to pipe on use directly of spread operator on NestedFuncCallsToPipeOperatorRector (#​7938)
  • [Console] Allow short command "p" on ProcessCommand (#​7931)
  • [Arguments] Skip self class const fetch inside this class target replacement on ReplaceArgumentDefaultValueRector (#​7940)
  • [CodeQuality] Hnadle with negation binary op previous if on CombineIfRector (#​7945)
  • [CodingStyle] Skip by reference required params on call inside on ArrowFunctionDelegatingCallToFirstClassCallableRector (#​7949)

Removed 💀

  • [DeadCode] Skip pipe operator on RemoveDeadStmtRector (#​7941)
  • [DeadCode] Handle crash on multi elseif on RemoveDeadIfBlockRector (#​7946)
  • [DeadCode] Skip with assign to call with target has #[NoDiscard] attribute on RemoveUnusedVariableAssignRector (#​7950)

rectorphp/rector-symfony 🎵

  • [CodeQuality] Handle different parameter type same name used on ControllerMethodInjectionToConstructorRector (#​929)
  • [CodeQuality] Skip used by static closure use on ControllerMethodInjectionToConstructorRector (#​928)
  • [Symfony61] Skip non static external class callable on MagicClosureTwigExtensionToNativeMethodsRector (#​927), Thanks @​wuchen90

rectorphp/rector-doctrine 🟠

  • Fix infinite loop check instanceof name check to use Name class (#​481)

rectorphp/rector-phpunit 🟢

  • [PHPunit 9] Move AssertRegExpRector to phpunit 90 set with refactor to use assertMatchesRegularExpression/assertDoesNotMatchRegularExpression (#​667)
  • [PHPUnit 9] Rename assertRegExp/assertNotRegExp to assertMatchesRegularExpression/assertDoesNotMatchRegularExpression on phpunit 90 set (#​666)
  • Fix assert PHPStan on ConfiguredMockEntityToSetterObjectRector (#​665)

v2.3.9: Released Rector 2.3.9

Compare Source

New Features 🥳

  • [CodingStyle] Add StrictInArrayRector (#​7921)

Bugfixes 🐛

  • [Php71] Handle crash on partial destruct on assign var on ListToArrayDestructRector (#​7909)
  • [CodeQuality] Skip no code parameter on custom Throwable instance on ThrowWithPreviousExceptionRector (#​7912)
  • Bump to PHPStan ^2.1.40 and utilize ClassConstantReflection->isFinalByKeyword() (#​7911)
  • [Php70] Handle keep right parentheses on ternary else is BinaryOp on TernaryToNullCoalescingRector (#​7916)
  • Properly build text node for junit output formatter (#​7917), Thanks @​brandonja991!
  • [CodeQuality] Skip with custom param in previous position on ThrowWithPreviousExceptionRector (#​7919)
  • [automated] Apply Coding Standard (#​7922)
  • [DX] Define list of allowed implicit commands on ConsoleApplication (#​7918)
  • [CodeQuality] Skip used by other property hooks on InlineConstructorDefaultToPropertyRector (#​7920)
  • [automated] Apply Coding Standard (#​7926)
  • [StrictStringParamConcatRector] Skip PHP version 5.6 or earlier (#​7927), Thanks @​ghostwriter!
  • [Php85] Skip single char literal string/int on OrdSingleByteRector (#​7928)

rectorphp/rector-symfony 🎵

  • [CodeQuality] Allow Doctrine EntityManagerInterface on ControllerMethodInjectionToConstructorRector (#​926)
  • [CodeQuality] Skip has conflicted param name different object on different method on ControllerMethodInjectionToConstructorRector (#​925)
  • [Symfony73] Handle with set allowExtraFields named argument on ConstraintOptionsToNamedArgumentsRector (#​924)
  • Skip classes with Symfony 7.1 Workflow listener attributes (#​923), Thanks @​dionisvl

rectorphp/rector-doctrine 🟠

  • [TypedCollections] Skip with string key already on CompleteReturnDocblockFromToManyRector (#​480)

rectorphp/rector-phpunit 🟢

  • [CodeQuality] Skip test method via #[Test] Attribute on DataProviderArrayItemsNewLinedRector (#​664)
  • skip conflicting return node and return type in TypeWillReturnCallableArrowFunctionRector! (#​663)
  • [Phpunit12] Skip as Argument w

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Enabled.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the renovate label Jan 15, 2026
@renovate
renovate Bot enabled auto-merge January 15, 2026 19:39
@renovate

renovate Bot commented Jan 15, 2026

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: composer.lock
Command failed: composer update lendable/composer-license-checker:1.4.0 php-cs-fixer/shim:3.95.12 rector/rector:2.5.5 --with-dependencies --ignore-platform-req=ext-* --ignore-platform-req=lib-* --no-ansi --no-interaction --no-scripts --no-autoloader --no-plugins --minimal-changes
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Root composer.json requires lendable/composer-license-checker ^1.4.0 -> satisfiable by lendable/composer-license-checker[1.4.0].
    - lendable/composer-license-checker 1.4.0 requires php ~8.4.0 || ~8.5.0 -> your php version (8.3; overridden via config.platform, same as actual) does not satisfy that requirement.

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.

@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from c597fd9 to d44bbb2 Compare January 20, 2026 15:51
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 4 times, most recently from 27c9884 to d840a00 Compare January 30, 2026 18:00
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from c6d6c59 to fc3a97f Compare February 5, 2026 00:24
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch from fc3a97f to fcc9c1c Compare February 13, 2026 15:13
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 4 times, most recently from c093eee to f54cbcd Compare February 27, 2026 19:35
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch from f54cbcd to 671e8f3 Compare March 1, 2026 11:01
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from 1e0bdbe to cc59b28 Compare March 27, 2026 03:40
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch from cc59b28 to 4e20158 Compare March 30, 2026 19:50
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from e12dd19 to c4fa2ac Compare April 15, 2026 17:41
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 3 times, most recently from c5ead56 to 07bb76f Compare April 23, 2026 19:02
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from 9318ce6 to 46f7bda Compare April 28, 2026 00:18
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 3 times, most recently from cc9c99d to 66f2c93 Compare May 22, 2026 14:35
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from e3e047e to 33c2004 Compare June 3, 2026 00:43
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 2 times, most recently from c4aadcd to fce77be Compare June 10, 2026 18:40
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 4 times, most recently from cba5405 to 92c8542 Compare June 23, 2026 16:47
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 5 times, most recently from 970c966 to 150c96d Compare June 29, 2026 12:38
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch from 150c96d to 7778c06 Compare July 2, 2026 19:26
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch 3 times, most recently from aa7f8f2 to 6a5dc17 Compare July 14, 2026 18:44
@renovate
renovate Bot force-pushed the renovate/composer-dev-tooling branch from 6a5dc17 to b8a8f93 Compare July 16, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants