Update all non-major dependencies #3

Merged
lukasdotcom merged 1 commit from renovate/all-minor-patch into main 2026-08-14 17:05:53 -04:00
Collaborator

This PR contains the following updates:

Package Change Age Confidence Type Update
@typescript-eslint/parser (source) 8.65.08.67.0 age confidence devDependencies minor
actions/checkout v7.0.0v7.0.1 age confidence action patch
eslint (source) 10.8.010.8.1 age confidence devDependencies patch
https://github.com/dorny/paths-filter v4.0.2v4.0.3 age confidence action patch
phpunit/phpunit (source) 10.5.6210.5.64 age confidence require-dev patch
rector/rector (source) 2.4.52.6.2 age confidence require-dev minor
vue (source) 3.5.403.5.41 age confidence dependencies patch

Release Notes

typescript-eslint/typescript-eslint (@​typescript-eslint/parser)

v8.67.0

Compare Source

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.66.0

Compare Source

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

actions/checkout (actions/checkout)

v7.0.1

Compare Source

eslint/eslint (eslint)

v10.8.1

Compare Source

Bug Fixes

  • 18eb0a7 fix: prevent ASI hazard in no-unused-labels autofix (#​21173) (dongkyu lee)
  • 151ba3f fix: false positives in getter-return and accessor-pairs (#​21163) (Grit)
  • 6898df9 fix: ignore meta-property names in id-denylist (#​21166) (Pixel)
  • 4d7db66 fix: ignore meta-property names in id-match (#​21167) (Pixel)
  • 677214e fix: handle ASI hazards in no-unused-vars removeVar suggestion (#​20935) (kuldeep kumar)

Documentation

  • 7d0cbf8 docs: Update README (GitHub Actions Bot)
  • 0a05812 docs: add missing backticks to no-duplicate-imports.js (#​21183) (Lee Daeun)
  • 678c90b docs: Update README (GitHub Actions Bot)
  • 8a10424 docs: Update README (GitHub Actions Bot)
  • 69bb948 docs: Update README (GitHub Actions Bot)

Chores

dorny/paths-filter (https://github.com/dorny/paths-filter)

v4.0.3

Compare Source

sebastianbergmann/phpunit (phpunit/phpunit)

v10.5.64: PHPUnit 10.5.64

Compare Source

Changed
  • #​6797: Adapt code generated for test double of interface with constructor for PHP 8.6

Learn how to install or update PHPUnit 10.5 in the documentation.

Keep up to date with PHPUnit:

v10.5.63: PHPUnit 10.5.63

Compare Source

Fixed
  • Regression introduced in PHPUnit 9.6.33

Learn how to install or update PHPUnit 10.5 in the documentation.

Keep up to date with PHPUnit:
rectorphp/rector (rector/rector)

v2.6.2: Released Rector 2.6.2

Compare Source

The 2.6.0 release introduced composer-based sets. This release finishes the job: every extension package now ships a single composer-based set, and the per-version set providers behind the old guessing game are gone.

use Rector\Config\RectorConfig;

return RectorConfig::configure()
    ->withComposerBased(
        doctrine: true,
        phpunit: true,
        twig: true,
    );

Each rule inside checks composer.json/installed.json on its own and runs only if the installed package version matches its constraint. No SymfonySetList::SYMFONY_63, no picking a PHPUnit version by hand. We're working hard to bring Drupal and Laravel community packages to the same system.


Run only the PHP rules (#​8322)

A new --php option on the process command runs only rules bound to a minimal PHP version — those implementing MinPhpVersionInterface. Useful to split a PHP upgrade from the rest, without a second config:

vendor/bin/rector process src --php --dry-run

New features 🥳

  • [Process] Add --php option to run only PHP version rules (#​8322)
  • [Configuration] Resolve the composer-based set of extension packages in withComposerBased() (#​8332), load Doctrine and Twig composer-based sets (#​8313)
  • [Configuration] Report explicit error when the --only rule exists but is not registered in rector.php (#​8300)
  • [DX] Warn on skipped classes that are not Rector rules (#​8323), include the skipped class name in the message (#​8325)
  • [DX] Show previous exceptions during bootstrap (#​8287)
 [WARNING] This skipped class is not a Rector rule, so it can never be skipped.
           Only classes that implement "Rector\Contract\Rector\RectorInterface"
           can be used in "->withSkip()"

New rules 🎉

rector-src

  • [DeadCode] RemoveRedundantTypeCheckRector (#​8307)
 $securityExpression = $operation->getSecurity();
-if (null === $securityExpression || ! is_string($securityExpression)) {
+if (null === $securityExpression) {
     return;
 }

rector-symfony

  • [Configs] EnableValidationAttributesRector (#​1004)
  • [Symfony 2.8] Rename Simple(Pre|Form)AuthenticatorInterface from Core to Http namespace (#​1031)

rector-phpunit

  • [PHPUnit 12.0] AnyMatcherToNewAnyInvokedCountRector for the deprecated any() matcher (#​764)

Bugfixes 🐛

  • [VersionBonding] Cap polyfill rules by the explicitly picked withPhpSets() version (#​8315) — withPhpSets(php82: true) with symfony/polyfill-php83 installed no longer produces PHP 8.3 code
  • [CodeQuality] Skip InlineConstructorDefaultToPropertyRector on non-final class (#​8310) and on a property defined in the parent when parent::__construct() is called (#​8297)
  • [CodeQuality] Skip SimpleXMLElement on IssetOnPropertyObjectToPropertyExistsRector (#​8284)
  • [DeadCode] Skip RemoveParentDelegatingConstructorRector on protected parent constructor (#​8309)
  • [DeadCode] Skip assert() enforcement that produces NeverType on NarrowWideUnionReturnTypeRector (#​8282)
  • [Php71] Skip AssignArrayToStringRector on a variable re-assigned as string (#​8293)
  • [Php81] Skip ArrayToFirstClassCallableRector when the arg type does not accept a Closure (#​8288), drop the Symfony PHP closure check (#​8291)

Set changes 📈

  • [Php84] Remove DeprecatedAnnotationToDeprecatedAttributeRector from the PHP 8.4 set and polyfills (#​8326)
  • [Php83] Remove AddOverrideAttributeToOverriddenMethodsRector from the PHP 8.3 and polyfill sets (#​8321)
  • [CodeQuality] Move 4 early-return rules to the code quality set (#​8301)
  • [DeadCode] Move RemoveReadonlyPropertyVisibilityOnReadonlyClassRector (#​8289), SimplifyBoolIdenticalTrueRector and UnwrapSprintfOneArgumentRector (#​8285) to the dead-code set
  • [rector-symfony] Convert the last version sets to the composer-based set (#​1021), drop per-version composer-triggered sets (#​1010), remove unused version-based set constants and configs (#​1019)
  • [rector-phpunit] Move every per-version rule into the composer-based set (#​758), remove per-version set configs and constants (#​760), register PropertyExistsWithoutAssertRector in the composer-based set (#​761)
  • [rector-symfony] Add JMS attribute rules to the set, bond three attribute rules to package versions (#​1029)

Deprecations 💀

Deprecated rules run without any effect, and print a warning and will be removed in a future major release.
These were deprecated as not part of any set, risky, opinionated or excluded by most users. The goal is to keep Rector valuable and reliable for the every day user.

rector-src

  • DeprecatedAnnotationToDeprecatedAttributeRector and ConstAndTraitDeprecatedAttributeRector (#​8347)
  • AddInterfaceByTraitRector (#​8346)
  • RemoveAnnotationRector (#​8345)
  • ScalarValueToConstFetchRector (#​8344)
  • FuncCallToMethodCallRector (#​8343)
  • AddReturnArrayDocblockBasedOnArrayMapRector (#​8342)
  • AddAssertArrayFromClassMethodDocblockRector (#​8341)
  • AddParamArrayDocblockBasedOnArrayMapRector (#​8340)
  • AddReturnDocblockForDimFetchArrayFromAssignsRector (#​8338)
  • AddSensitiveParameterAttributeRector (#​8337)
  • PropertyHookRector — property hooks are a matter of preference (#​8331)
  • JsonThrowOnErrorRector — can cause BC breaks (#​8327)
  • CoalesceToTernaryRector — risky (#​8324)
  • [EarlyReturn] ChangeNestedIfsToEarlyReturnRector (#​8304), ChangeNestedForeachIfsToEarlyContinueRector (#​8303), ReturnBinaryOrToEarlyReturnRector (#​8302), ChangeOrIfContinueToMultiContinueRector (#​8299)
  • [Strict] DisallowedEmptyRuleFixerRector (#​8290)
  • [Php85] NestedFuncCallsToPipeOperatorRector and SequentialAssignmentsToPipeOperatorRector (#​8286)
  • [CodeQuality] SwitchNegatedTernaryRector (#​8283)
  • cacheClass() — the file-vs-memory cache storage choice moved into CacheFactory; only FileCacheStorage is ever useful to end users (#​8311)
  • symfonyRoute and symfonyValidator args in withAttributesSets() (#​8317)
  • ComposerTriggeredSet in favor of ComposerPackageConstraintInterface (#​8296)
  • withComposerBased(netteUtils:) argument (#​8329)

rector-symfony

  • ActionSuffixRemoverRector (#​1022)
  • ControllerMethodInjectionToConstructorRector (#​1020)
  • TraitGetByTypeToInjectRector (#​1002)
  • RemoveDefaultGetBlockPrefixRector (#​1017)
  • SwiftMailer to Symfony Mailer set (#​1026)

rector-doctrine

  • RemoveEmptyTableAttributeRector (#​505)
  • MoveCurrentDateTimeDefaultInEntityToConstructorRector, drop the force_nullable option (#​504)

Removals 💀

  • Drop the nette/utils set and its single UtilsJsonStaticCallNamedArgRector rule (#​8329) — the only third-party-library rule left in rector-src, readability only
  • Remove deprecated NewInInitializerRector (#​8328)
  • [Sets] Remove the PHP and core set providers (#​8320), the Symfony per-version providers (#​8292), SymfonySetProvider, PHPUnitSetProvider (#​8295) and DoctrineSetProvider (#​8298) from the collector
  • [rector-symfony] Remove TwigSetProvider (#​1015) and the empty Symfony per-version set providers (#​1012)
  • [rector-phpunit] Remove deprecated PHPUnitSetProvider (#​759)
  • [rector-doctrine] Remove DoctrineSetProvider (#​501), drop the unused symfony/yaml dependency (#​500)

rectorphp/rector-symfony 🎵

  • [Symfony 7.3] Merge AsTwigFilter/AsTwigFunction rules into a single rule, add getTests() support (#​1027), restore the merged rules as deprecated (#​1028)
  • [CodeQuality] ControllerMethodInjectionToConstructorRector: re-use the parent protected property (#​1003), skip event and session params (#​1005), use #[Required] autowire() when the parent has a constructor (#​1006), skip type-guarded classes and use a unique autowire method name (#​1007), re-use an existing #[Required] method (#​1008)
  • [CodeQuality] LoadValidatorMetadataToAttributeRector: skip non-constant constraint args (#​1000) and constraints without their own constructor (#​1001)
  • [Sets] Fix AddParamTypeDeclaration to nullable types where the upstream param defaults to null (#​1023)
  • [Symfony30] Skip methods without return in GetRequestRector (#​1013), move it to the Symfony 2.5 set (#​1009)
  • [Twig] Fix truncated Twig_Tests_EnvironmentTest_Extension rename (#​1016)

rectorphp/rector-phpunit 🧪

  • [PHPUnit 6.0] AddDoesNotPerformAssertionToNonAssertingTestRector: add the attribute directly and skip traits (#​765), remove addToAssertionCount() calls (#​763), skip Twig IntegrationTestCase children (#​762)

v2.6.1: Released Rector 2.6.1

Compare Source

Bugfix 🐛

  • [composer-based] Fix fatal error in the composer-based command on a lazy-initialized property, e.g. PHPStan UnionType::$normalized (#​8280)
PHP Fatal error:  Uncaught Error: Typed property PHPStan\Type\UnionType::$normalized
must not be accessed before initialization in src/Console/Command/ComposerBasedCommand.php:205

Composer-based sets keep growing: Twig, nette/utils and the rest of Symfony 📦

Follow-up release to 2.6.0. The composer-based rollout continues - Twig and nette/utils join, and every remaining Symfony rule now declares the package version its target API was added in.

use Rector\Config\RectorConfig;

return RectorConfig::configure()
    ->withComposerBased(
        doctrine: true,
        netteUtils: true,
        phpunit: true,
        symfony: true,
        twig: true,
    );

The new Twig composer-based set replaces the twig112twig127 → ... → twig30 chain with a single set, where every rule checks the installed twig/twig version:

 final class SomeTwigUse
 {
-    public function run(Twig_Environment $twigEnvironment)
+    public function run(\Twig\Environment $twigEnvironment)
     {
-        return new Twig_SimpleFilter('some_filter', 'strlen');
+        return new \Twig\TwigFilter('some_filter', 'strlen');
     }
 }

Package bonding (composer-based rollout) 📦

  • [NetteUtils] Bind nette/utils rules to the installed package version; nette-utils4.php becomes composer-based.php and is loaded as a single set (#​8275)
  • [rector-symfony] Add Twig composer-based set (#​996)
  • [rector-symfony] Bond the remaining 48 Symfony rules to their composer package version (#​994)
  • [rector-symfony] Register LoadValidatorMetadataToAttributeRector in the composer-based set - the last interface-bonded rule left outside it (#​997)
  • [rector-symfony] Bond ContainerInterfaceServiceToServiceContainerRector to symfony/dependency-injection >=6.0 (#​999)
  • [rector-doctrine] Bond AddGetReferenceTypeRector to doctrine/data-fixtures >=1.6 and the annotation-to-attribute sets to their package constraints (#​497)
  • [rector-doctrine] Bond version-specific rules and configuration to composer package constraints (#​495) *
  • [rector-phpunit] Bond RemoveExpectAnyFromMockRector to PHPUnit 11+ (#​756) *

* landed in 2.6.0, missing from its release notes

The per-version sets are not touched - every rule stays registered where it was.


Set changes 📈

  • [CodingStyle] Remove ConsistentImplodeRector from the coding style level - the swapped implode($array, $glue) signature was removed in PHP 8.0, so the rule belongs to the php80 set only, where it already is (#​8273)
  • [rector-doctrine] Add DoctrineSetList::COMPOSER_BASED constant, remove the empty DOCTRINE_BUNDLE_210 set (#​499)

Bugfixes 🐛

  • [TypeDeclarationDocblocks] Skip docblock reprint when nothing changed in AddParamArrayDocblockFromAssignsParamToParamReferenceRector (#​8271)
  • [rector-symfony] [Symfony44] Fix duplicated return in ConsoleExecuteReturnIntRector on a trailing comment (#​992), plus a fixture for a block comment with a commented-out return (#​993)
  • [rector-symfony] [Symfony44] Skip redundant (int) cast on a match return in ConsoleExecuteReturnIntRector - a match of int constants is a UnionType, so the instanceof IntegerType check missed it (#​998)
 public function execute(InputInterface $input, OutputInterface $output): int
 {
-    return (int) match ($input->getArgument('type')) {
+    return match ($input->getArgument('type')) {
         'a' => 0,
         default => 1,
     };
 }

Deprecations 💀

Deprecated rules still run, but print a warning and will be removed in a future major release.
These are coding standard preferences or opinionated rewrites - a coding standard tool is the better place for them.

rector-src

  • WrapEncapsedVariableInCurlyBracesRector - also removed from the coding style level (#​8272)
 function run($world)
 {
-    echo "Hello $world!";
+    echo "Hello {$world}!";
 }

The actual PHP 8.2 deprecation, ${var}, is covered by VariableInStringInterpolationFixerRector in the php82 set.

  • CountArrayToEmptyArrayComparisonRector - also removed from the coding style level (#​8274)
-count($array) === 0;
-count($array) > 0;
+$array === [];
+$array !== [];
  • ArraySpreadInsteadOfArrayMergeRector - the spread result is harder to read, and ... mid-array looks dangerous in review (#​8277)
-$values = array_merge($firstValues, $secondValues);
+$values = [...$firstValues, ...$secondValues];
  • UnusedForeachValueToArrayKeysRector - also removed from the code quality level (#​8278)
-foreach ($values as $key => $value) {
+foreach (array_keys($values) as $key) {
     $items[$key] = null;
 }

rector-doctrine

  • GetRepositoryServiceLocatorToRepositoryServiceInjectionRector - it resolved the repository class by running a regular expression over the entity file contents (#​498)

Renames 🔄

  • [rector-symfony] ReplaceServiceArgumentRectorContainerInterfaceServiceToServiceContainerRector, no longer configurable (#​999)

Both sets configured it with the same 2 values, for a single Symfony 6.0 BC break - the Psr\Container\ContainerInterface and Symfony\...\DependencyInjection\ContainerInterface aliases of the service_container service were removed. Now hardcoded, and the ReplaceServiceArgument value object is gone.

 use function Symfony\Component\DependencyInjection\Loader\Configurator\service;

-return service(ContainerInterface::class);
+return service('service_container');

v2.6.0: Released Rector 2.6.0

Compare Source

Composer-based sets - let Rector handle upgrade from composer.json 🥳

The main theme of this release: rules that turn themselves on based on the package versions you actually have installed.

Instead of picking a Symfony or PHPUnit set by version number and guessing what applies, register the composer-based set once. Every rule inside checks composer.json/installed.json and only runs if the installed package version matches its constraint.

use Rector\Config\RectorConfig;

return RectorConfig::configure()
    ->withComposerBased(
        doctrine: true,
        phpunit: true,
        symfony: true,
        twig: true,
    );

We're working on full coverage. At the moment, PHPUnit and Symfony rules are already migrated to this approach. Not only rules, but also rule configuration can be bound to a package version:

$rectorConfig->ruleWithConfigurationComposerVersionBound(
    SomeRector::class,
    [...],
    'phpunit/phpunit',
    '>=11.0'
);

To see what is active and why, there is a new command:

vendor/bin/rector composer-based
 Composer package bound rules
 ------------------------------- ----------------- ---------- ----------- --------
  Rule                            Package           Requires   Installed   Active
 ------------------------------- ----------------- ---------- ----------- --------
  RemoveExpectAnyFromMockRector   phpunit/phpunit   >=11.0     11.5.2      yes
  RedirectToRouteRector           symfony/...       >=2.6      7.2.1       yes
 ------------------------------- ----------------- ---------- ----------- --------

 ! [NOTE] 2 of 2 composer package bound items are active

And to run only those rules in a single process:

vendor/bin/rector process --composer-based

New features 🥳

  • [Config] Add ruleWithConfigurationComposerVersionBound() (#​8244)
  • [composer-based] Add composer-based command (#​8246)
  • [composer-based] Report rule configuration bound to installed package version (#​8247)
  • [composer-based] Register each rule only once, add --composer-based process filter (#​8248)
  • [Configuration] Load single composer-based PHPUnit set in withComposerBased() (#​8255)
  • [Configuration] Load single composer-based Symfony set in withComposerBased() (#​8259)
  • [Console] Print composer-based rule configuration on separate full-width line (#​8256)
  • [Testing] Allow a test case to resolve package versions from a standalone composer.json (#​8264)

New rules 🎉

rector-src

  • [DeadCode] RemoveTestsOverriddenPrivateMethodParameterRector (#​8254)

rector-phpunit

  • [CodeQuality] AddIntersectionParamToMockObjectParamRector (#​755)
  • [PHPUnit 11.0] ExpectsParamToMockObjectRector — for private test method params (#​753)
  • [PHPUnit 11.0] MockObjectArgCreateStubToCreateMockRector (#​741)
  • [PHPUnit 11.5] AssertContainsOnlyMethodCallRector (#​738)

rector-symfony

  • [CodeQuality] LoadValidatorMetadataToAttributeRector (#​988)

Bugfixes 🐛

  • [DeadCode] Skip RecastingRemovalRector on array dim fetch value (#​8262)
  • [DeadCode] Skip RemoveDefaultValueFromAssignedPropertyRector on early return in constructor-called method (#​8261)
  • [DeadCode] Skip static property in RemoveDefaultValueFromAssignedPropertyRector (#​8240)
  • [DeadCode] Remove whole assign statement on unused createStub() in tests (#​8257)
  • [NodeAnalyzer] Detect always terminated stmts with statements before the return (#​8260)
  • [Configuration] Resolve --only rule name with shell-eaten backslashes (#​8267)
  • [rector-symfony] Add try/catch fixtures with statements before the return (#​986)

# before: quotes were needed to match rule
vendor/bin/rector p --only="\Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector"

# after: simple class name works as well
vendor/bin/rector p --only \Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector
  • [Composer] Prefer composer.json constraint over outdated installed.json version (#​8242)
  • Fix InstalledPackageResolver cwd fallback lost by promoted property (#​8237)
  • [rector-phpunit] Fix swapped preCondition and postCondition attribute mapping (#​746)
  • [rector-phpunit] Handle test traits in DataProviderAnnotationToAttributeRector (#​751, #​752)

Set changes 📈

  • [Config] Move 3 rules from coding style set to their proper sets — ExplicitPublicClassMethodRector to PHP 5.3, plus one each to code quality and dead code (#​8266)
  • [CodingStyle] Remove MinMaxToClampRector from coding style level (#​8270)
  • [rector-symfony] Add SymfonySetList::COMPOSER_BASED (#​982)
  • [rector-phpunit] Register composer-based set in PHPUnitSetProvider (#​748)

Deprecations 💀

Deprecated rules still run, but print a w and will be removed in a future major release.
These were deprecated as not part of any set, risky, opinionated or excluded by most users. Goal is to make Rector useful more to masses and every day user by having valuable and reliable rules.

rector-src

  • EncapsedStringsToSprintfRector (#​8265)
  • SimplifyRegexPatternRector (#​8263)
  • BinaryOpStandaloneAssignsToDirectRector (#​8269)
  • NullableCompareToNullRector (#​8268)
  • NestedTernaryToMatchRector (#​8241)
  • AddReturnDocblockFromMethodCallDocblockRector (#​8239)
  • Gmagick to Imagick set (#​8252)
  • withPhp53Sets() ... withPhp74Sets() — use withPhpLevel() instead (#​8253)
  • cacheMetaExtension() — reports a warning when used (#​8251)

rector-doctrine

  • YamlToAttributeDoctrineMappingRector (#​492)
  • DoctrineSetList::YAML_TO_ANNOTATIONS set (#​493)

rector-symfony

  • TemplateAnnotationToThisRenderRector (#​989)
  • ReturnDirectJsonResponseRector (#​987)
  • AutowireAttributeRector (#​981)

rector-phpunit

  • WillReturnCallbackFallbackToThrowRector (#​740)
  • ReplaceTestFunctionPrefixWithAttributeRector (#​739)

Removals 💀

  • [depre] Remove strict-booleans set, deprecated since 2025-10 (#​8243)
  • [ChangesReporting] Remove junit output format (#​8250)
  • [rector-doctrine] Remove DoctrineDocBlockResolver, deprecated since 2025-05 (#​491)
  • [rector-symfony] Remove StringExtensionToConfigBuilderRector, deprecated since 2025-10 (#​978)
  • [rector-phpunit] Remove 4 rules deprecated since 2025-10 (#​743)
  • [rector-phpunit] Remove deprecated AssertPropertyExistsRector (#​742)

Package bonding (composer-based rollout)

  • [rector-symfony] Bond version-specific rules to composer package constraints (#​979), include all configured rules in the composer-based set (#​980), bond AddViolationToBuildViolationRector to symfony/validator 2.5 (#​983), add AuthorizationCheckerIsGrantedExtractorRector to the composer-based set (#​985), bond RedirectToRouteRector to symfony/framework-bundle 2.6 (#​991)
  • [rector-phpunit] Bond version-specific rules to composer package constraints (#​754), bond stub and mock rules to phpunit/phpunit >=11.0 (#​750), bond annotation-to-attribute rules to phpunit/phpunit >=10.0 (#​744, #​745), move composer version bound rules to composer-based set (#​747)

v2.5.9: Released Rector 2.5.9

Compare Source

Bugfixes 🐛

  • [DeadCode] Remove unreachable class-like checks in Class_-only rules (#​8217)
  • [CodingStyle] Use native php-parser node API over class reflection (#​8218)
  • [Php80] Remove AstResolver usage on AddParamBasedOnParentClassMethodRector (#​8196)
  • Wire RichParser node visitors via DI factory instead of private property hack (#​8215)
  • [Php80] Skip promoting a property the parent declares without a native type in ClassPropertyAssignToConstructorPromotionRector (#​8232)
  • [DeadCode] Keep empty __construct() in anonymous class that extends parent on RemoveEmptyClassMethodRector (#​8219)
  • [DeadCode] Skip negative zero on RemoveDeadZeroAndOneOperationRector (#​8213)
  • [DeadCode] Skip protected property on non-final class on RemoveDefaultValueFromAssignedPropertyRector (#​8214)
  • [DeadCode] Skip array dim fetch assign on RemoveDefaultValueFromAssignedPropertyRector (#​8212)
  • [DeadCode] Skip if/else in loop on RemoveDefaultValueFromAssignedPropertyRector (#​8211)
  • [DeadCode] Skip early return in constructor on RemoveDefaultValueFromAssignedPropertyRector (#​8209)

Set changes 🗑️

NullToStrictStringFuncCallArgRector out of the PHP 8.1 set (#​8234)

The rule and all its fixtures stay, so it can still be opted into:

->withRules([NullToStrictStringFuncCallArgRector::class])

Deprecations 💀

TypeDeclarationDocblocks: 3 data provider docblock rules (#​8235)

Data provider docblock typing is not relevant to code quality — it increases maintenance cost and decreases readability of the test class.

Deprecated rules:

  • AddReturnArrayDocblockFromDataProviderParamRector
  • AddReturnDocblockDataProviderRector
  • AddParamArrayDocblockFromDataProviderRector

rectorphp/rector-symfony 🎵

  • [Symfony72] Match push() to its own RequestStack variable in PushRequestToRequestStackConstructorRector (#​971)
  • [Symfony44] Skip custom isGranted() service calls in controllers in AuthorizationCheckerIsGrantedExtractorRector (#​973)
  • [Symfony42] Update Cookie fixture after NewToStaticCallRector config removal (#​974)
  • Drop rector/type-perfect, its rules ship in tomasvotruba/type-coverage 2.3 now (#​972)
  • Bump dev dependencies, PHPUnit 13 (#​976)
  • [deps] Bump symfony/config to ^8.1 (#​977)
Deprecated: SimplifyFormRenderingRector (#​975)

The rule removed the explicit ->createView() call when a form was passed to render():

Symfony supports passing the FormInterface directly, but the shorthand is ambiguous and breaks dynamic forms: forms modified in PRE_SET_DATA/POST_SUBMIT listeners and submitted over AJAX end up with a 422 response and no clear error. Keeping the explicit ->createView() call is the reliable form. See symfony/symfony#50542.


rectorphp/rector-phpunit 🧪

  • [PHPUnit 13] Fix class in expectExceptionMessage() rename to TestCase (#​735)

rectorphp/rector-downgrade-php ⬇️

  • [DowngradePhp81] Reference MHASH_* constants by name in DowngradeHashAlgorithmXxHashRector to fix PHP 8.5 deprecation (#​386)

v2.5.8: Released Rector 2.5.8

Compare Source

New Features 🥳

  • [dx] Add "if" set with if/else/ternary rules (#​8199)
  • [DeadCode] Add RemoveDeadInstanceOfAssertRector (#​8202)
  • [DeadCode] Add RemoveDoubleSelfAssignRector (#​8203)
  • [DeadCode] Add RemoveParentDelegatingClassMethodRector (#​8204)
  • [DeadCode] Add RemoveDefaultValueFromAssignedPropertyRector (#​8207)
  • [TypeDeclaration] Fix incomplete type on yield variable + yield from in AddParamTypeBasedOnPHPUnitDataProviderRector (#​8206)

Bugfixes 🐛

  • Fix LogicalToBooleanRector: parenthesize assignments nested under unary/binary operators (#​8184)
  • [TypeDeclaration] Skip trait methods on ParamTypeByMethodCallType rules (#​8189)
  • [Php80] Skip promotion when property type is wider than constructor param on ClassPropertyAssignToConstructorPromotionRector (#​8170), Thanks @​ximki-vinki!
  • [Php85] Skip outer spread on NestedFuncCallsToPipeOperatorRector (#​8191)
  • [DeadCode] Fix crash on float version arg in ConditionResolver (#​8192)
  • Make NestedFuncCallsToPipeOperatorRector minimum depth configurable (#​8193)
  • Fix codeception data provider detection (#​8194), Thanks @​d-mitrofanov-v!
  • Make PHPStan DI-Container available in bootstrap files (#​8190), Thanks @​staabm!
  • [Privatization] Skip Symfony Command protected static property in PrivatizeFinalClassPropertyRector (#​8201)
  • Bump to PHPStan ^2.2.6 and Fix its Container compatibility in RichParser (#​8208)

Removed 💀

  • skip @​ return this on RemoveReturnTagIncompatibleWithNativeTypeRector on Traits (#​8185)
  • [DeadCode] Skip string scalar sub type on RemoveReturnTagIncompatibleWithNativeTypeRector (#​8186)

rectorphp/rector-symfony 🎵

  • [Symfony73] Remove empty configure() method in CommandHelpToAttributeRector (#​969)
  • [Symfony73] Keep AbstractExtension when Twig extension overrides a built-in function/filter (#​968)
  • [Symfony73] Wrap scalar groups option in array in ConstraintOptionsToNamedArgumentsRector (#​967)
  • [Symfony61] Remove empty configure() method even with empty body (#​966)
  • [Symfony61] Remove now empty configure() method in CommandConfigureToAttributeRector (#​965)
  • [CodeQuality] Respect typeGuardedClasses and skip closure-only returns in ResponseReturnTypeControllerActionRector (#​964)
  • [Symfony44] Return 1 instead of (int) false in ConsoleExecuteReturnIntRector (#​963)
  • [CodeQuality] Add union and method call return type support to ResponseReturnTypeControllerActionRector (#​961)
  • [Twig30] Add new set for Twig 30 (#​960), Thanks @​MrYamous

rectorphp/rector-doctrine 🟠


rectorphp/rector-phpunit 🟢

  • [PHPUnit 13] Add PHPUnit 13 config set (#​733)
  • [CodeQuality] Skip super global variables on AssertIssetToSpecificMethodRector (#​732)
  • [CodeQuality] Skip anonymous classes in AssertClassToThisAssertRector (#​729)
  • [CodeQuality] Move AssertClassToThisAssertRector hook from Class_ to ClassMethod (#​728)
  • AssertEqualsToSameRector: skip arrays whose actual value key order is not provably identical (#​727)

v2.5.7: Released Rector 2.5.7

Compare Source

This release sharpens the PHPUnit code-quality sets, adds a focused narrow asserts set, deprecates two blurry Symfony web-test rules, and fixes a handful of docblock false-positives in dead-code removal.

New Features 🎉

PHPUnit: PHPUNIT_NARROW_ASSERTS set

A new set focused on narrowing broad asserts to their specific, more descriptive method — e.g. assertTrue(isset($a['b']))assertArrayHasKey('b', $a). (rector-phpunit #​716)

use Rector\PHPUnit\Set\PHPUnitSetList;

return RectorConfig::configure()
    ->withSets([PHPUnitSetList::PHPUNIT_NARROW_ASSERTS]);

withPreparedSets() gains phpunitNarrowAsserts + phpunitMockToStub

The 2 PHPUnit sets are now toggleable like any other prepared set. (#​8178)

return RectorConfig::configure()
    ->withPreparedSets(
        phpunitNarrowAsserts: true,
        phpunitMockToStub: true,
    );

PHPUnit: flip with($this->callback(...)) on void methods to willReturnCallback()

VoidMethodWithCallbackToWillReturnCallbackRector (renamed + refocused) drops the pointless return value and types the closure as void, matching the mocked void method. (rector-phpunit #​724)

 $this->createMock(SomeClass::class)
     ->method('run')
-    ->with($this->callback(function ($arg) {
-        echo $arg;
-
-        return true;
-    }));
+    ->willReturnCallback(function ($arg): void {
+        echo $arg;
+    });
Console: -v as alias for --version

Since the verbose option was removed, -v now prints the version. (#​8177)

vendor/bin/rector -v

# Rector 2.x.x

Improvements 🔧

  • [StaticTypeMapper] Map phpstan-special scalar types (literal-string, numeric-string, …) to their real PHPStan types instead of a bogus ObjectType, so precise docblocks survive dead-code cleanup (#​8176)
  • [PHPUnit CodeQuality] Verify assert method name exists on the Assert class via reflection before transforming (rector-phpunit #​720)
  • [PHPUnit CodeQuality] Simplify single-statement void callback in CallbackSingleAssertToSimplerRector (rector-phpunit #​722)
  • [PHPUnit CodeQuality] Collapse all instanceof asserts for multiple nullable instances in a single run (rector-phpunit #​721)
  • [PHPUnit CodeQuality] Use atLeast() instead of exactly() in DecorateWillReturnMapWithExpectsMockRector (rector-phpunit #​719)

Bug Fixes 🐛

  • [DeadCode] Preserve generic @return tags in RemoveReturnTagIncompatibleWithNativeTypeRector (#​8183)
  • [DeadCode] Skip templated type in RemoveReturnTagIncompatibleWithNativeTypeRector (#​8180)
  • [DeadCode] Skip PHPStan type alias in RemoveReturnTagIncompatibleWithNativeTypeRector (#​8179)
  • [CodeQuality] Skip abstract class in CompleteDynamicPropertiesRector (#​8182)
  • [Php71] Skip magic @method in RemoveExtraParametersRector (#​8181)
  • [PHPUnit] Skip with() multiple arguments in VoidMethodWithCallbackToWillReturnCallbackRector (rector-phpunit #​725)
  • [PHPUnit] Skip new object instances in NarrowIdenticalWithConsecutiveRector — each new is a fresh instance, collapsing them changes intent (rector-phpunit #​726)
  • [PHPUnit] Skip mock property removal when used in a trait (rector-phpunit #​723)
  • [PHPUnit] Skip nested value compare in CallbackSingleAssertToSimplerRector (rector-phpunit #​718)
  • [PHPUnit] Skip union types in AssertEqualsToSameRector to preserve loose comparison (rector-phpunit #​717)

Deprecations 💀

Symfony: WebTestCaseAssertIsSuccessfulRector + WebTestCaseAssertResponseCodeRector

Both rules hide the asserted behavior and force a different assert method per status code, splitting one clear assertion into several implicit ones. Asserting the HTTP status code directly is clearer and uniform. (rector-symfony #​958)


v2.5.6: Released Rector 2.5.6

Compare Source

New Features 🥳

  • [DeadCode] Add RemoveReturnTagIncompatibleWithNativeTypeRector (#​8172)
 final class SomeClass
 {
-    /**
-     * @return SomeObject
-     */
     public function getName(): string
     {
         return $this->someObject->getName();
     }
 }
  • [TypeDeclarationDocblocks] Add MergePhpstanDocTagIntoNativeRector to merge @phpstan-* doc tags into native tags (#​8171)
 final class SomeClass
 {
     /**
-     * @var Collection
-     *
-     * @phpstan-var Collection<int, string>
+     * @var Collection<int, string>
      */
     private $items;
 }

Bugfixes 🐛


PHPUnit 🧪

New rules and changes from rector-phpunit.

New Rules
  • [CodeQuality] Add AssertClassToThisAssertRector (#​707)
 use PHPUnit\Framework\Assert;
 use PHPUnit\Framework\TestCase;

 final class SomeClass extends TestCase
 {
     public function run()
     {
-        Assert::assertEquals('expected', $result);
+        $this->assertEquals('expected', $result);
     }
 }
  • [CodeQuality] Add BareCreateMockAssignToDirectUseRector — inline a single-use createMock() assignment (#​708)
 final class SomeTest extends TestCase
 {
     public function test()
     {
-        $someObject = $this->createMock(SomeClass::class);
-        $this->process($someObject);
+        $this->process($this->createMock(SomeClass::class));
     }

     private function process(SomeClass $someObject): void
     {
     }
 }
  • [CodeQuality] Add WillReturnCallbackFallbackToThrowRector — throw on an unexpected extra consecutive call (#​710)
         $this->someServiceMock->expects($matcher)
             ->method('run')
             ->willReturnCallback(function () use ($matcher) {
                 if ($matcher->numberOfInvocations() === 1) {
                     return 1;
                 }
+
+                throw new \PHPUnit\Framework\Exception(sprintf('Method should not be called for the %dth time', $matcher->numberOfInvocations()));
             });
  • [CodeQuality] Add RemoveReturnFromVoidMethodMockCallbackRector — type a void mock callback and drop its value return (#​711)
         $this->createMock(SomeClass::class)
             ->method('run')
-            ->willReturnCallback(function ($arg) {
+            ->willReturnCallback(function ($arg): void {
                 echo $arg;
-
-                return true;
             });

(SomeClass::run() returns void.)

  • [CodeQuality] Add CallbackSingleAssertToSimplerRector — collapse a with() callback with a sole assertSame() to equalTo() (#​714)
         $builder->expects($this->exactly(2))
             ->method('add')
-            ->with($this->callback(function ($type): bool {
-                $this->assertSame(TextType::class, $type);
-
-                return true;
-            }));
+            ->with($this->equalTo(TextType::class));
Improvements
  • [CodeQuality] Skip TestCase suffix classes in RemoveNeverUsedMockPropertyRector (#​709)
  • [CodeQuality] Produce void callbacks with bare return in WithCallbackIdenticalToStandaloneAssertsRector (#​712)
  • [CodeQuality] Handle return throw and return null in void mock callbacks (#​713)

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
 {
-    /**
-     * @return $this
-     */
     public function some(): self
     {
         return $this;
     }
 }

RemoveMixedDocblockOverruledByNativeTypeRector

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

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

RemoveUselessUnionReturnDocblockRector

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

-    /**
-     * @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)

-    /**
-     * @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)

-    /**
-     * @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)

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

NarrowArrayCollectionUnionReturnDocblockRector

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

     /**
-     * @return LeadEventLog[]|ArrayCollection
+     * @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)

     /**
-     * @return Event|\PHPUnit\Framework\MockObject\MockObject
+     * @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)

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

AddStubIntersectionVarToStubPropertyRector

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

+    /**
+     * @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)

 /**
- * @var FieldModel|MockObject
+ * @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)

 /**
- * @var FormBuilderInterface
+ * @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!
vuejs/core (vue)

v3.5.41

Compare Source

Bug Fixes

Configuration

📅 Schedule: (UTC)

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

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

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 has been generated by Mend Renovate CLI.

This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | Type | Update | |---|---|---|---|---|---| | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`8.65.0` → `8.67.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.65.0/8.67.0) | ![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/8.67.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/8.65.0/8.67.0?slim=true) | devDependencies | minor | | [actions/checkout](https://github.com/actions/checkout) | `v7.0.0` → `v7.0.1` | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/actions%2fcheckout/v7.0.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/actions%2fcheckout/v7.0.0/v7.0.1?slim=true) | action | patch | | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | [`10.8.0` → `10.8.1`](https://renovatebot.com/diffs/npm/eslint/10.8.0/10.8.1) | ![age](https://developer.mend.io/api/mc/badges/age/npm/eslint/10.8.1?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/eslint/10.8.0/10.8.1?slim=true) | devDependencies | patch | | [https://github.com/dorny/paths-filter](https://github.com/dorny/paths-filter) | `v4.0.2` → `v4.0.3` | ![age](https://developer.mend.io/api/mc/badges/age/github-tags/dorny%2fpaths-filter/v4.0.3?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/github-tags/dorny%2fpaths-filter/v4.0.2/v4.0.3?slim=true) | action | patch | | [phpunit/phpunit](https://phpunit.de/) ([source](https://github.com/sebastianbergmann/phpunit)) | `10.5.62` → `10.5.64` | ![age](https://developer.mend.io/api/mc/badges/age/packagist/phpunit%2fphpunit/10.5.64?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/phpunit%2fphpunit/10.5.62/10.5.64?slim=true) | require-dev | patch | | [rector/rector](https://getrector.com/) ([source](https://github.com/rectorphp/rector)) | `2.4.5` → `2.6.2` | ![age](https://developer.mend.io/api/mc/badges/age/packagist/rector%2frector/2.6.2?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/packagist/rector%2frector/2.4.5/2.6.2?slim=true) | require-dev | minor | | [vue](https://vuejs.org/) ([source](https://github.com/vuejs/core)) | [`3.5.40` → `3.5.41`](https://renovatebot.com/diffs/npm/vue/3.5.40/3.5.41) | ![age](https://developer.mend.io/api/mc/badges/age/npm/vue/3.5.41?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/vue/3.5.40/3.5.41?slim=true) | dependencies | patch | --- ### Release Notes <details> <summary>typescript-eslint/typescript-eslint (@&#8203;typescript-eslint/parser)</summary> ### [`v8.67.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8670-2026-08-10) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v8.66.0...v8.67.0) This was a version bump only for parser to align it with other projects, there were no code changes. See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.67.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.66.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8660-2026-08-03) [Compare Source](https://github.com/typescript-eslint/typescript-eslint/compare/v8.65.0...v8.66.0) This was a version bump only for parser to align it with other projects, there were no code changes. See [GitHub Releases](https://github.com/typescript-eslint/typescript-eslint/releases/tag/v8.66.0) for more information. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>actions/checkout (actions/checkout)</summary> ### [`v7.0.1`](https://github.com/actions/checkout/blob/HEAD/CHANGELOG.md#v701) [Compare Source](https://github.com/actions/checkout/compare/v7...v7.0.1) - Skip running unsafe pr check if input is default by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2518](https://github.com/actions/checkout/pull/2518) - Trim only ascii whitespace for branch by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2521](https://github.com/actions/checkout/pull/2521) - Escape values passed to --unset by [@&#8203;aiqiaoy](https://github.com/aiqiaoy) in [#&#8203;2530](https://github.com/actions/checkout/pull/2530) - Various dependency updates </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v10.8.1`](https://github.com/eslint/eslint/releases/tag/v10.8.1) [Compare Source](https://github.com/eslint/eslint/compare/v10.8.0...v10.8.1) #### Bug Fixes - [`18eb0a7`](https://github.com/eslint/eslint/commit/18eb0a7e787b9fac3049ef3dad0e845d2bd940a4) fix: prevent ASI hazard in `no-unused-labels` autofix ([#&#8203;21173](https://github.com/eslint/eslint/issues/21173)) (dongkyu lee) - [`151ba3f`](https://github.com/eslint/eslint/commit/151ba3f5834a0909e8b9b1736f4889ac694c0104) fix: false positives in `getter-return` and `accessor-pairs` ([#&#8203;21163](https://github.com/eslint/eslint/issues/21163)) (Grit) - [`6898df9`](https://github.com/eslint/eslint/commit/6898df9364639ee64b9448a4cb6b08a30c16bd37) fix: ignore meta-property names in `id-denylist` ([#&#8203;21166](https://github.com/eslint/eslint/issues/21166)) (Pixel) - [`4d7db66`](https://github.com/eslint/eslint/commit/4d7db6628e2badf0857cb88734fe641c3874bce9) fix: ignore meta-property names in `id-match` ([#&#8203;21167](https://github.com/eslint/eslint/issues/21167)) (Pixel) - [`677214e`](https://github.com/eslint/eslint/commit/677214e7eea83d8bc6e4b79eea871577e1369d5f) fix: handle ASI hazards in no-unused-vars removeVar suggestion ([#&#8203;20935](https://github.com/eslint/eslint/issues/20935)) (kuldeep kumar) #### Documentation - [`7d0cbf8`](https://github.com/eslint/eslint/commit/7d0cbf81cfdb7526b5c4cb7b222ddc7f257db560) docs: Update README (GitHub Actions Bot) - [`0a05812`](https://github.com/eslint/eslint/commit/0a05812adb12598b32e85297b98df5ad14501d60) docs: add missing backticks to `no-duplicate-imports.js` ([#&#8203;21183](https://github.com/eslint/eslint/issues/21183)) (Lee Daeun) - [`678c90b`](https://github.com/eslint/eslint/commit/678c90b55da2889d4400cbf6e2584ab683faf202) docs: Update README (GitHub Actions Bot) - [`8a10424`](https://github.com/eslint/eslint/commit/8a104242e8e1c5614940fab7324346974cff7d26) docs: Update README (GitHub Actions Bot) - [`69bb948`](https://github.com/eslint/eslint/commit/69bb948061105426dbe6e3c931fcda783286e020) docs: Update README (GitHub Actions Bot) #### Chores - [`0a14800`](https://github.com/eslint/eslint/commit/0a148005051fded2ef1d14cc228ae505251b4b10) chore: update github/codeql-action action to v4.37.4 ([#&#8203;21196](https://github.com/eslint/eslint/issues/21196)) (renovate\[bot]) - [`05adcb1`](https://github.com/eslint/eslint/commit/05adcb13542061dc7fadde5cd58d23d405a96d93) test: fix failing ecosystem test for `eslint-plugin-unicorn` ([#&#8203;21191](https://github.com/eslint/eslint/issues/21191)) (Lazizbek Ergashev) - [`5611035`](https://github.com/eslint/eslint/commit/56110356652dd614b3cf0933538abb551fc6bd6f) test: add error locations info to `no-void` ([#&#8203;21185](https://github.com/eslint/eslint/issues/21185)) (Lee Daeun) - [`ee47333`](https://github.com/eslint/eslint/commit/ee47333aa681cfc3cb54df08c38f211ea219cc2a) ci: bump github/codeql-action from 4 to 4.37.3 ([#&#8203;21176](https://github.com/eslint/eslint/issues/21176)) (dependabot\[bot]) - [`f131c03`](https://github.com/eslint/eslint/commit/f131c034ad91bbf06bcbb6b5e931447a8e419a46) chore: improve ecosystem test failure reporting ([#&#8203;20937](https://github.com/eslint/eslint/issues/20937)) (crimsonjay0) - [`1f6edde`](https://github.com/eslint/eslint/commit/1f6eddee609b369b50993eab08d437dda4700991) chore: update ecosystem plugins ([#&#8203;21182](https://github.com/eslint/eslint/issues/21182)) (ESLint Bot) - [`d3266fb`](https://github.com/eslint/eslint/commit/d3266fb26c719c6b90a6cbe54bb120c9335ad19c) chore: unpin `webpack` dependency ([#&#8203;21172](https://github.com/eslint/eslint/issues/21172)) (Francesco Trotta) - [`65a6519`](https://github.com/eslint/eslint/commit/65a6519cc8733b4688558a8611397cf9d01dd55d) chore: add allowScripts field to package.json ([#&#8203;21092](https://github.com/eslint/eslint/issues/21092)) (GiHoon Noh) - [`22e5256`](https://github.com/eslint/eslint/commit/22e52568536e0009d4493dc888736bc163220c4b) ci: add `triage:no` label to Dependabot PRs ([#&#8203;21141](https://github.com/eslint/eslint/issues/21141)) (lumir) - [`55c9038`](https://github.com/eslint/eslint/commit/55c9038836c91b6bd5617f0c97bea2274c9cc0bf) ci: bump actions/labeler from 6 to 7 ([#&#8203;21159](https://github.com/eslint/eslint/issues/21159)) (dependabot\[bot]) - [`7280e78`](https://github.com/eslint/eslint/commit/7280e78183d4711a49916b6a49ba5efaa651a991) chore: update dependency prettier to v3.9.6 ([#&#8203;21162](https://github.com/eslint/eslint/issues/21162)) (renovate\[bot]) - [`eddbad6`](https://github.com/eslint/eslint/commit/eddbad60158d8cda86830fbe934a9d2282273b32) test: fix failing ecosystem test for `eslint-plugin-unicorn` ([#&#8203;21156](https://github.com/eslint/eslint/issues/21156)) (Francesco Trotta) - [`60a178d`](https://github.com/eslint/eslint/commit/60a178d5ef1b0c471be0831031ed7347f8f81dc2) chore: update ecosystem plugins ([#&#8203;21150](https://github.com/eslint/eslint/issues/21150)) (ESLint Bot) - [`f9f61dc`](https://github.com/eslint/eslint/commit/f9f61dc6112836f46a58a410c38b8c2faf10973f) test: add error locations to `no-unreachable` ([#&#8203;21151](https://github.com/eslint/eslint/issues/21151)) (JIYEON) - [`d086293`](https://github.com/eslint/eslint/commit/d08629382b0a6aaa042823b796e5100e60053b54) test: add error locations to `no-undef` ([#&#8203;21147](https://github.com/eslint/eslint/issues/21147)) (JIYEON) - [`cc01b67`](https://github.com/eslint/eslint/commit/cc01b67061bbf558aa25746883ea1cad847f7cf2) test: add error locations to `no-useless-catch` ([#&#8203;21144](https://github.com/eslint/eslint/issues/21144)) (devoil) - [`688e75e`](https://github.com/eslint/eslint/commit/688e75ede01b295d51f2f86c9d82da020a4c887e) chore: add missing backticks in JSDoc ([#&#8203;21143](https://github.com/eslint/eslint/issues/21143)) (Bo Hyun Kim) - [`7c1e175`](https://github.com/eslint/eslint/commit/7c1e17543ad396f50f65b003cf9142d43d3c63b0) test: add error locations to `require-await` ([#&#8203;21145](https://github.com/eslint/eslint/issues/21145)) (Grit) - [`588a26d`](https://github.com/eslint/eslint/commit/588a26ddce3c5a20f5b3f3d51ba1353cce7b4b0c) test: add error locations to `no-extra-label` ([#&#8203;21139](https://github.com/eslint/eslint/issues/21139)) (dongkyu lee) - [`059aa89`](https://github.com/eslint/eslint/commit/059aa895743639e3ab53d14f9d944ff4be042233) test: add error locations to `no-useless-concat` ([#&#8203;21140](https://github.com/eslint/eslint/issues/21140)) (dongkyu lee) - [`5a452a8`](https://github.com/eslint/eslint/commit/5a452a8ba53917d65c9d83c3959ed35c2f890613) test: add error locations to `no-const-assign` ([#&#8203;21138](https://github.com/eslint/eslint/issues/21138)) (dongkyu lee) </details> <details> <summary>dorny/paths-filter (https://github.com/dorny/paths-filter)</summary> ### [`v4.0.3`](https://github.com/dorny/paths-filter/blob/HEAD/CHANGELOG.md#v403) [Compare Source](https://github.com/dorny/paths-filter/compare/v4.0.2...v4.0.3) - [Document safe handling of file list outputs in workflows](https://github.com/dorny/paths-filter/pull/326) - [Escape multi-line filenames in list-files shell and csv output](https://github.com/advisories/GHSA-7hc6-8hq5-9q2m) - [Add 'some-with-excludes' predicate quantifier](https://github.com/dorny/paths-filter/pull/322) - [Add contents permission to PR example](https://github.com/dorny/paths-filter/pull/248) - [Scope base-ignored warning to API path](https://github.com/dorny/paths-filter/pull/319) - [Update outputs in readme to account for the 'every' predicate-quantifier](https://github.com/dorny/paths-filter/pull/247) </details> <details> <summary>sebastianbergmann/phpunit (phpunit/phpunit)</summary> ### [`v10.5.64`](https://github.com/sebastianbergmann/phpunit/releases/tag/10.5.64): PHPUnit 10.5.64 [Compare Source](https://github.com/sebastianbergmann/phpunit/compare/10.5.63...10.5.64) ##### Changed - [#&#8203;6797](https://github.com/sebastianbergmann/phpunit/issues/6797): Adapt code generated for test double of interface with constructor for PHP 8.6 *** Learn how to install or update PHPUnit 10.5 in the [documentation](https://docs.phpunit.de/en/10.5/installation.html). ##### Keep up to date with PHPUnit: - You can follow [@&#8203;phpunit@phpc.social](https://phpc.social/@&#8203;phpunit) to stay up to date with PHPUnit's development. - You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit. ### [`v10.5.63`](https://github.com/sebastianbergmann/phpunit/releases/tag/10.5.63): PHPUnit 10.5.63 [Compare Source](https://github.com/sebastianbergmann/phpunit/compare/10.5.62...10.5.63) ##### Fixed - Regression introduced in PHPUnit 9.6.33 *** Learn how to install or update PHPUnit 10.5 in the [documentation](https://docs.phpunit.de/en/10.5/installation.html). ##### Keep up to date with PHPUnit: - You can follow [@&#8203;phpunit@phpc.social](https://phpc.social/@&#8203;phpunit) to stay up to date with PHPUnit's development. - You can subscribe to the [PHPUnit Updates](https://phpunit.de/newsletter) newsletter to receive updates about and tips for PHPUnit. </details> <details> <summary>rectorphp/rector (rector/rector)</summary> ### [`v2.6.2`](https://github.com/rectorphp/rector/releases/tag/2.6.2): Released Rector 2.6.2 [Compare Source](https://github.com/rectorphp/rector/compare/2.6.1...2.6.2) The 2.6.0 release introduced composer-based sets. This release finishes the job: **every extension package now ships a single composer-based set**, and the per-version set providers behind the old guessing game are gone. ```php use Rector\Config\RectorConfig; return RectorConfig::configure() ->withComposerBased( doctrine: true, phpunit: true, twig: true, ); ``` Each rule inside checks `composer.json`/`installed.json` on its own and runs only if the installed package version matches its constraint. No `SymfonySetList::SYMFONY_63`, no picking a PHPUnit version by hand. We're working hard to bring Drupal and Laravel community packages to the same system. <br> #### Run only the PHP rules ([#&#8203;8322]) A new `--php` option on the `process` command runs **only rules bound to a minimal PHP version** — those implementing `MinPhpVersionInterface`. Useful to split a PHP upgrade from the rest, without a second config: ```bash vendor/bin/rector process src --php --dry-run ``` <br> #### New features :partying_face: - \[Process] Add `--php` option to run only PHP version rules ([#&#8203;8322]) - \[Configuration] Resolve the composer-based set of extension packages in `withComposerBased()` ([#&#8203;8332]), load Doctrine and Twig composer-based sets ([#&#8203;8313]) - \[Configuration] Report explicit error when the `--only` rule exists but is not registered in `rector.php` ([#&#8203;8300]) - \[DX] Warn on skipped classes that are not Rector rules ([#&#8203;8323]), include the skipped class name in the message ([#&#8203;8325]) - \[DX] Show previous exceptions during bootstrap ([#&#8203;8287]) ``` [WARNING] This skipped class is not a Rector rule, so it can never be skipped. Only classes that implement "Rector\Contract\Rector\RectorInterface" can be used in "->withSkip()" ``` <br> #### New rules :tada: **rector-src** - \[DeadCode] `RemoveRedundantTypeCheckRector` ([#&#8203;8307]) ```diff $securityExpression = $operation->getSecurity(); -if (null === $securityExpression || ! is_string($securityExpression)) { +if (null === $securityExpression) { return; } ``` **rector-symfony** - \[Configs] `EnableValidationAttributesRector` ([#&#8203;1004]) - \[Symfony 2.8] Rename `Simple(Pre|Form)AuthenticatorInterface` from `Core` to `Http` namespace ([#&#8203;1031]) **rector-phpunit** - \[PHPUnit 12.0] `AnyMatcherToNewAnyInvokedCountRector` for the deprecated `any()` matcher ([#&#8203;764]) <br> #### Bugfixes :bug: - \[VersionBonding] Cap polyfill rules by the explicitly picked `withPhpSets()` version ([#&#8203;8315]) — `withPhpSets(php82: true)` with `symfony/polyfill-php83` installed no longer produces PHP 8.3 code - \[CodeQuality] Skip `InlineConstructorDefaultToPropertyRector` on non-final class ([#&#8203;8310]) and on a property defined in the parent when `parent::__construct()` is called ([#&#8203;8297]) - \[CodeQuality] Skip `SimpleXMLElement` on `IssetOnPropertyObjectToPropertyExistsRector` ([#&#8203;8284]) - \[DeadCode] Skip `RemoveParentDelegatingConstructorRector` on protected parent constructor ([#&#8203;8309]) - \[DeadCode] Skip `assert()` enforcement that produces `NeverType` on `NarrowWideUnionReturnTypeRector` ([#&#8203;8282]) - \[Php71] Skip `AssignArrayToStringRector` on a variable re-assigned as string ([#&#8203;8293]) - \[Php81] Skip `ArrayToFirstClassCallableRector` when the arg type does not accept a `Closure` ([#&#8203;8288]), drop the Symfony PHP closure check ([#&#8203;8291]) <br> #### Set changes :chart_with_upwards_trend: - \[Php84] Remove `DeprecatedAnnotationToDeprecatedAttributeRector` from the PHP 8.4 set and polyfills ([#&#8203;8326]) - \[Php83] Remove `AddOverrideAttributeToOverriddenMethodsRector` from the PHP 8.3 and polyfill sets ([#&#8203;8321]) - \[CodeQuality] Move 4 early-return rules to the code quality set ([#&#8203;8301]) - \[DeadCode] Move `RemoveReadonlyPropertyVisibilityOnReadonlyClassRector` ([#&#8203;8289]), `SimplifyBoolIdenticalTrueRector` and `UnwrapSprintfOneArgumentRector` ([#&#8203;8285]) to the dead-code set - \[rector-symfony] Convert the last version sets to the composer-based set ([#&#8203;1021]), drop per-version composer-triggered sets ([#&#8203;1010]), remove unused version-based set constants and configs ([#&#8203;1019]) - \[rector-phpunit] Move every per-version rule into the composer-based set ([#&#8203;758]), remove per-version set configs and constants ([#&#8203;760]), register `PropertyExistsWithoutAssertRector` in the composer-based set ([#&#8203;761]) - \[rector-symfony] Add JMS attribute rules to the set, bond three attribute rules to package versions ([#&#8203;1029]) <br> #### Deprecations :skull: Deprecated rules run without any effect, and print a warning and will be removed in a future major release. These were deprecated as not part of any set, risky, opinionated or excluded by most users. The goal is to keep Rector valuable and reliable for the every day user. **rector-src** - `DeprecatedAnnotationToDeprecatedAttributeRector` and `ConstAndTraitDeprecatedAttributeRector` ([#&#8203;8347]) - `AddInterfaceByTraitRector` ([#&#8203;8346]) - `RemoveAnnotationRector` ([#&#8203;8345]) - `ScalarValueToConstFetchRector` ([#&#8203;8344]) - `FuncCallToMethodCallRector` ([#&#8203;8343]) - `AddReturnArrayDocblockBasedOnArrayMapRector` ([#&#8203;8342]) - `AddAssertArrayFromClassMethodDocblockRector` ([#&#8203;8341]) - `AddParamArrayDocblockBasedOnArrayMapRector` ([#&#8203;8340]) - `AddReturnDocblockForDimFetchArrayFromAssignsRector` ([#&#8203;8338]) - `AddSensitiveParameterAttributeRector` ([#&#8203;8337]) - `PropertyHookRector` — property hooks are a matter of preference ([#&#8203;8331]) - `JsonThrowOnErrorRector` — can cause BC breaks ([#&#8203;8327]) - `CoalesceToTernaryRector` — risky ([#&#8203;8324]) - \[EarlyReturn] `ChangeNestedIfsToEarlyReturnRector` ([#&#8203;8304]), `ChangeNestedForeachIfsToEarlyContinueRector` ([#&#8203;8303]), `ReturnBinaryOrToEarlyReturnRector` ([#&#8203;8302]), `ChangeOrIfContinueToMultiContinueRector` ([#&#8203;8299]) - \[Strict] `DisallowedEmptyRuleFixerRector` ([#&#8203;8290]) - \[Php85] `NestedFuncCallsToPipeOperatorRector` and `SequentialAssignmentsToPipeOperatorRector` ([#&#8203;8286]) - \[CodeQuality] `SwitchNegatedTernaryRector` ([#&#8203;8283]) - `cacheClass()` — the file-vs-memory cache storage choice moved into `CacheFactory`; only `FileCacheStorage` is ever useful to end users ([#&#8203;8311]) - `symfonyRoute` and `symfonyValidator` args in `withAttributesSets()` ([#&#8203;8317]) - `ComposerTriggeredSet` in favor of `ComposerPackageConstraintInterface` ([#&#8203;8296]) - `withComposerBased(netteUtils:)` argument ([#&#8203;8329]) **rector-symfony** - `ActionSuffixRemoverRector` ([#&#8203;1022]) - `ControllerMethodInjectionToConstructorRector` ([#&#8203;1020]) - `TraitGetByTypeToInjectRector` ([#&#8203;1002]) - `RemoveDefaultGetBlockPrefixRector` ([#&#8203;1017]) - SwiftMailer to Symfony Mailer set ([#&#8203;1026]) **rector-doctrine** - `RemoveEmptyTableAttributeRector` ([#&#8203;505]) - `MoveCurrentDateTimeDefaultInEntityToConstructorRector`, drop the `force_nullable` option ([#&#8203;504]) <br> #### Removals :skull: - Drop the `nette/utils` set and its single `UtilsJsonStaticCallNamedArgRector` rule ([#&#8203;8329]) — the only third-party-library rule left in rector-src, readability only - Remove deprecated `NewInInitializerRector` ([#&#8203;8328]) - \[Sets] Remove the PHP and core set providers ([#&#8203;8320]), the Symfony per-version providers ([#&#8203;8292]), `SymfonySetProvider`, `PHPUnitSetProvider` ([#&#8203;8295]) and `DoctrineSetProvider` ([#&#8203;8298]) from the collector - \[rector-symfony] Remove `TwigSetProvider` ([#&#8203;1015]) and the empty Symfony per-version set providers ([#&#8203;1012]) - \[rector-phpunit] Remove deprecated `PHPUnitSetProvider` ([#&#8203;759]) - \[rector-doctrine] Remove `DoctrineSetProvider` ([#&#8203;501]), drop the unused `symfony/yaml` dependency ([#&#8203;500]) <br> #### rectorphp/rector-symfony :musical_note: - \[Symfony 7.3] Merge `AsTwigFilter`/`AsTwigFunction` rules into a single rule, add `getTests()` support ([#&#8203;1027]), restore the merged rules as deprecated ([#&#8203;1028]) - \[CodeQuality] `ControllerMethodInjectionToConstructorRector`: re-use the parent protected property ([#&#8203;1003]), skip event and session params ([#&#8203;1005]), use `#[Required]` `autowire()` when the parent has a constructor ([#&#8203;1006]), skip type-guarded classes and use a unique autowire method name ([#&#8203;1007]), re-use an existing `#[Required]` method ([#&#8203;1008]) - \[CodeQuality] `LoadValidatorMetadataToAttributeRector`: skip non-constant constraint args ([#&#8203;1000]) and constraints without their own constructor ([#&#8203;1001]) - \[Sets] Fix `AddParamTypeDeclaration` to nullable types where the upstream param defaults to null ([#&#8203;1023]) - \[Symfony30] Skip methods without return in `GetRequestRector` ([#&#8203;1013]), move it to the Symfony 2.5 set ([#&#8203;1009]) - \[Twig] Fix truncated `Twig_Tests_EnvironmentTest_Extension` rename ([#&#8203;1016]) <br> #### rectorphp/rector-phpunit :test_tube: - \[PHPUnit 6.0] `AddDoesNotPerformAssertionToNonAssertingTestRector`: add the attribute directly and skip traits ([#&#8203;765]), remove `addToAssertionCount()` calls ([#&#8203;763]), skip Twig `IntegrationTestCase` children ([#&#8203;762]) <br> [#&#8203;8276]: https://github.com/rectorphp/rector-src/pull/8276 [#&#8203;8282]: https://github.com/rectorphp/rector-src/pull/8282 [#&#8203;8283]: https://github.com/rectorphp/rector-src/pull/8283 [#&#8203;8284]: https://github.com/rectorphp/rector-src/pull/8284 [#&#8203;8285]: https://github.com/rectorphp/rector-src/pull/8285 [#&#8203;8286]: https://github.com/rectorphp/rector-src/pull/8286 [#&#8203;8287]: https://github.com/rectorphp/rector-src/pull/8287 [#&#8203;8288]: https://github.com/rectorphp/rector-src/pull/8288 [#&#8203;8289]: https://github.com/rectorphp/rector-src/pull/8289 [#&#8203;8290]: https://github.com/rectorphp/rector-src/pull/8290 [#&#8203;8291]: https://github.com/rectorphp/rector-src/pull/8291 [#&#8203;8292]: https://github.com/rectorphp/rector-src/pull/8292 [#&#8203;8293]: https://github.com/rectorphp/rector-src/pull/8293 [#&#8203;8295]: https://github.com/rectorphp/rector-src/pull/8295 [#&#8203;8296]: https://github.com/rectorphp/rector-src/pull/8296 [#&#8203;8297]: https://github.com/rectorphp/rector-src/pull/8297 [#&#8203;8298]: https://github.com/rectorphp/rector-src/pull/8298 [#&#8203;8299]: https://github.com/rectorphp/rector-src/pull/8299 [#&#8203;8300]: https://github.com/rectorphp/rector-src/pull/8300 [#&#8203;8301]: https://github.com/rectorphp/rector-src/pull/8301 [#&#8203;8302]: https://github.com/rectorphp/rector-src/pull/8302 [#&#8203;8303]: https://github.com/rectorphp/rector-src/pull/8303 [#&#8203;8304]: https://github.com/rectorphp/rector-src/pull/8304 [#&#8203;8306]: https://github.com/rectorphp/rector-src/pull/8306 [#&#8203;8307]: https://github.com/rectorphp/rector-src/pull/8307 [#&#8203;8309]: https://github.com/rectorphp/rector-src/pull/8309 [#&#8203;8310]: https://github.com/rectorphp/rector-src/pull/8310 [#&#8203;8311]: https://github.com/rectorphp/rector-src/pull/8311 [#&#8203;8313]: https://github.com/rectorphp/rector-src/pull/8313 [#&#8203;8315]: https://github.com/rectorphp/rector-src/pull/8315 [#&#8203;8317]: https://github.com/rectorphp/rector-src/pull/8317 [#&#8203;8320]: https://github.com/rectorphp/rector-src/pull/8320 [#&#8203;8321]: https://github.com/rectorphp/rector-src/pull/8321 [#&#8203;8322]: https://github.com/rectorphp/rector-src/pull/8322 [#&#8203;8323]: https://github.com/rectorphp/rector-src/pull/8323 [#&#8203;8324]: https://github.com/rectorphp/rector-src/pull/8324 [#&#8203;8325]: https://github.com/rectorphp/rector-src/pull/8325 [#&#8203;8326]: https://github.com/rectorphp/rector-src/pull/8326 [#&#8203;8327]: https://github.com/rectorphp/rector-src/pull/8327 [#&#8203;8328]: https://github.com/rectorphp/rector-src/pull/8328 [#&#8203;8329]: https://github.com/rectorphp/rector-src/pull/8329 [#&#8203;8331]: https://github.com/rectorphp/rector-src/pull/8331 [#&#8203;8332]: https://github.com/rectorphp/rector-src/pull/8332 [#&#8203;8333]: https://github.com/rectorphp/rector-src/pull/8333 [#&#8203;8334]: https://github.com/rectorphp/rector-src/pull/8334 [#&#8203;8335]: https://github.com/rectorphp/rector-src/pull/8335 [#&#8203;8336]: https://github.com/rectorphp/rector-src/pull/8336 [#&#8203;8337]: https://github.com/rectorphp/rector-src/pull/8337 [#&#8203;8338]: https://github.com/rectorphp/rector-src/pull/8338 [#&#8203;8339]: https://github.com/rectorphp/rector-src/pull/8339 [#&#8203;8340]: https://github.com/rectorphp/rector-src/pull/8340 [#&#8203;8341]: https://github.com/rectorphp/rector-src/pull/8341 [#&#8203;8342]: https://github.com/rectorphp/rector-src/pull/8342 [#&#8203;8343]: https://github.com/rectorphp/rector-src/pull/8343 [#&#8203;8344]: https://github.com/rectorphp/rector-src/pull/8344 [#&#8203;8345]: https://github.com/rectorphp/rector-src/pull/8345 [#&#8203;8346]: https://github.com/rectorphp/rector-src/pull/8346 [#&#8203;8347]: https://github.com/rectorphp/rector-src/pull/8347 [#&#8203;1000]: https://github.com/rectorphp/rector-symfony/pull/1000 [#&#8203;1001]: https://github.com/rectorphp/rector-symfony/pull/1001 [#&#8203;1002]: https://github.com/rectorphp/rector-symfony/pull/1002 [#&#8203;1003]: https://github.com/rectorphp/rector-symfony/pull/1003 [#&#8203;1004]: https://github.com/rectorphp/rector-symfony/pull/1004 [#&#8203;1005]: https://github.com/rectorphp/rector-symfony/pull/1005 [#&#8203;1006]: https://github.com/rectorphp/rector-symfony/pull/1006 [#&#8203;1007]: https://github.com/rectorphp/rector-symfony/pull/1007 [#&#8203;1008]: https://github.com/rectorphp/rector-symfony/pull/1008 [#&#8203;1009]: https://github.com/rectorphp/rector-symfony/pull/1009 [#&#8203;1010]: https://github.com/rectorphp/rector-symfony/pull/1010 [#&#8203;1012]: https://github.com/rectorphp/rector-symfony/pull/1012 [#&#8203;1013]: https://github.com/rectorphp/rector-symfony/pull/1013 [#&#8203;1015]: https://github.com/rectorphp/rector-symfony/pull/1015 [#&#8203;1016]: https://github.com/rectorphp/rector-symfony/pull/1016 [#&#8203;1017]: https://github.com/rectorphp/rector-symfony/pull/1017 [#&#8203;1019]: https://github.com/rectorphp/rector-symfony/pull/1019 [#&#8203;1020]: https://github.com/rectorphp/rector-symfony/pull/1020 [#&#8203;1021]: https://github.com/rectorphp/rector-symfony/pull/1021 [#&#8203;1022]: https://github.com/rectorphp/rector-symfony/pull/1022 [#&#8203;1023]: https://github.com/rectorphp/rector-symfony/pull/1023 [#&#8203;1026]: https://github.com/rectorphp/rector-symfony/pull/1026 [#&#8203;1027]: https://github.com/rectorphp/rector-symfony/pull/1027 [#&#8203;1028]: https://github.com/rectorphp/rector-symfony/pull/1028 [#&#8203;1029]: https://github.com/rectorphp/rector-symfony/pull/1029 [#&#8203;1031]: https://github.com/rectorphp/rector-symfony/pull/1031 [#&#8203;758]: https://github.com/rectorphp/rector-phpunit/pull/758 [#&#8203;759]: https://github.com/rectorphp/rector-phpunit/pull/759 [#&#8203;760]: https://github.com/rectorphp/rector-phpunit/pull/760 [#&#8203;761]: https://github.com/rectorphp/rector-phpunit/pull/761 [#&#8203;762]: https://github.com/rectorphp/rector-phpunit/pull/762 [#&#8203;763]: https://github.com/rectorphp/rector-phpunit/pull/763 [#&#8203;764]: https://github.com/rectorphp/rector-phpunit/pull/764 [#&#8203;765]: https://github.com/rectorphp/rector-phpunit/pull/765 [#&#8203;500]: https://github.com/rectorphp/rector-doctrine/pull/500 [#&#8203;501]: https://github.com/rectorphp/rector-doctrine/pull/501 [#&#8203;502]: https://github.com/rectorphp/rector-doctrine/pull/502 [#&#8203;504]: https://github.com/rectorphp/rector-doctrine/pull/504 [#&#8203;505]: https://github.com/rectorphp/rector-doctrine/pull/505 [#&#8203;387]: https://github.com/rectorphp/rector-downgrade-php/pull/387 ### [`v2.6.1`](https://github.com/rectorphp/rector/releases/tag/2.6.1): Released Rector 2.6.1 [Compare Source](https://github.com/rectorphp/rector/compare/2.6.0...2.6.1) #### Bugfix :bug: - **\[composer-based] Fix fatal error in the `composer-based` command on a lazy-initialized property, e.g. PHPStan `UnionType::$normalized` ([#&#8203;8280])** ``` PHP Fatal error: Uncaught Error: Typed property PHPStan\Type\UnionType::$normalized must not be accessed before initialization in src/Console/Command/ComposerBasedCommand.php:205 ``` *** #### Composer-based sets keep growing: Twig, nette/utils and the rest of Symfony :package: Follow-up release to [2.6.0](https://github.com/rectorphp/rector/releases/tag/2.6.0). The composer-based rollout continues - **Twig and nette/utils join**, and every remaining Symfony rule now declares the package version its target API was added in. ```php use Rector\Config\RectorConfig; return RectorConfig::configure() ->withComposerBased( doctrine: true, netteUtils: true, phpunit: true, symfony: true, twig: true, ); ``` <br> The new Twig composer-based set replaces the `twig112` → `twig127` → ... → `twig30` chain with a single set, where every rule checks the installed `twig/twig` version: ```diff final class SomeTwigUse { - public function run(Twig_Environment $twigEnvironment) + public function run(\Twig\Environment $twigEnvironment) { - return new Twig_SimpleFilter('some_filter', 'strlen'); + return new \Twig\TwigFilter('some_filter', 'strlen'); } } ``` <br> #### Package bonding (composer-based rollout) :package: - \[NetteUtils] Bind `nette/utils` rules to the installed package version; `nette-utils4.php` becomes `composer-based.php` and is loaded as a single set ([#&#8203;8275]) - \[rector-symfony] Add Twig composer-based set ([#&#8203;996]) - \[rector-symfony] Bond the remaining 48 Symfony rules to their composer package version ([#&#8203;994]) - \[rector-symfony] Register `LoadValidatorMetadataToAttributeRector` in the composer-based set - the last interface-bonded rule left outside it ([#&#8203;997]) - \[rector-symfony] Bond `ContainerInterfaceServiceToServiceContainerRector` to `symfony/dependency-injection` >=6.0 ([#&#8203;999]) - \[rector-doctrine] Bond `AddGetReferenceTypeRector` to `doctrine/data-fixtures` >=1.6 and the annotation-to-attribute sets to their package constraints ([#&#8203;497]) - \[rector-doctrine] Bond version-specific rules and configuration to composer package constraints ([#&#8203;495]) \* - \[rector-phpunit] Bond `RemoveExpectAnyFromMockRector` to PHPUnit 11+ ([#&#8203;756]) \* <sub>\* landed in 2.6.0, missing from its release notes</sub> The per-version sets are **not** touched - every rule stays registered where it was. <br> #### Set changes :chart_with_upwards_trend: - \[CodingStyle] Remove `ConsistentImplodeRector` from the coding style level - the swapped `implode($array, $glue)` signature was removed in PHP 8.0, so the rule belongs to the `php80` set only, where it already is ([#&#8203;8273]) - \[rector-doctrine] Add `DoctrineSetList::COMPOSER_BASED` constant, remove the empty `DOCTRINE_BUNDLE_210` set ([#&#8203;499]) <br> #### Bugfixes :bug: - \[TypeDeclarationDocblocks] Skip docblock reprint when nothing changed in `AddParamArrayDocblockFromAssignsParamToParamReferenceRector` ([#&#8203;8271]) - \[rector-symfony] \[Symfony44] Fix duplicated `return` in `ConsoleExecuteReturnIntRector` on a trailing comment ([#&#8203;992]), plus a fixture for a block comment with a commented-out return ([#&#8203;993]) - \[rector-symfony] \[Symfony44] Skip redundant `(int)` cast on a `match` return in `ConsoleExecuteReturnIntRector` - a `match` of int constants is a `UnionType`, so the `instanceof IntegerType` check missed it ([#&#8203;998]) ```diff public function execute(InputInterface $input, OutputInterface $output): int { - return (int) match ($input->getArgument('type')) { + return match ($input->getArgument('type')) { 'a' => 0, default => 1, }; } ``` <br> #### Deprecations :skull: Deprecated rules still run, but print a warning and will be removed in a future major release. These are coding standard preferences or opinionated rewrites - a coding standard tool is the better place for them. **rector-src** - `WrapEncapsedVariableInCurlyBracesRector` - also removed from the coding style level ([#&#8203;8272]) ```diff function run($world) { - echo "Hello $world!"; + echo "Hello {$world}!"; } ``` The actual PHP 8.2 deprecation, `${var}`, is covered by `VariableInStringInterpolationFixerRector` in the `php82` set. - `CountArrayToEmptyArrayComparisonRector` - also removed from the coding style level ([#&#8203;8274]) ```diff -count($array) === 0; -count($array) > 0; +$array === []; +$array !== []; ``` - `ArraySpreadInsteadOfArrayMergeRector` - the spread result is harder to read, and `...` mid-array looks dangerous in review ([#&#8203;8277]) ```diff -$values = array_merge($firstValues, $secondValues); +$values = [...$firstValues, ...$secondValues]; ``` - `UnusedForeachValueToArrayKeysRector` - also removed from the code quality level ([#&#8203;8278]) ```diff -foreach ($values as $key => $value) { +foreach (array_keys($values) as $key) { $items[$key] = null; } ``` **rector-doctrine** - `GetRepositoryServiceLocatorToRepositoryServiceInjectionRector` - it resolved the repository class by running a regular expression over the entity **file contents** ([#&#8203;498]) <br> #### Renames :arrows_counterclockwise: - \[rector-symfony] `ReplaceServiceArgumentRector` → `ContainerInterfaceServiceToServiceContainerRector`, no longer configurable ([#&#8203;999]) Both sets configured it with the same 2 values, for a single Symfony 6.0 BC break - the `Psr\Container\ContainerInterface` and `Symfony\...\DependencyInjection\ContainerInterface` aliases of the `service_container` service were removed. Now hardcoded, and the `ReplaceServiceArgument` value object is gone. ```diff use function Symfony\Component\DependencyInjection\Loader\Configurator\service; -return service(ContainerInterface::class); +return service('service_container'); ``` <br> [#&#8203;8271]: https://github.com/rectorphp/rector-src/pull/8271 [#&#8203;8272]: https://github.com/rectorphp/rector-src/pull/8272 [#&#8203;8273]: https://github.com/rectorphp/rector-src/pull/8273 [#&#8203;8274]: https://github.com/rectorphp/rector-src/pull/8274 [#&#8203;8275]: https://github.com/rectorphp/rector-src/pull/8275 [#&#8203;8277]: https://github.com/rectorphp/rector-src/pull/8277 [#&#8203;8278]: https://github.com/rectorphp/rector-src/pull/8278 [#&#8203;8280]: https://github.com/rectorphp/rector-src/pull/8280 [#&#8203;992]: https://github.com/rectorphp/rector-symfony/pull/992 [#&#8203;993]: https://github.com/rectorphp/rector-symfony/pull/993 [#&#8203;994]: https://github.com/rectorphp/rector-symfony/pull/994 [#&#8203;995]: https://github.com/rectorphp/rector-symfony/pull/995 [#&#8203;996]: https://github.com/rectorphp/rector-symfony/pull/996 [#&#8203;997]: https://github.com/rectorphp/rector-symfony/pull/997 [#&#8203;998]: https://github.com/rectorphp/rector-symfony/pull/998 [#&#8203;999]: https://github.com/rectorphp/rector-symfony/pull/999 [#&#8203;495]: https://github.com/rectorphp/rector-doctrine/pull/495 [#&#8203;497]: https://github.com/rectorphp/rector-doctrine/pull/497 [#&#8203;498]: https://github.com/rectorphp/rector-doctrine/pull/498 [#&#8203;499]: https://github.com/rectorphp/rector-doctrine/pull/499 [#&#8203;756]: https://github.com/rectorphp/rector-phpunit/pull/756 ### [`v2.6.0`](https://github.com/rectorphp/rector/releases/tag/2.6.0): Released Rector 2.6.0 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.9...2.6.0) ### Composer-based sets - let Rector handle upgrade from `composer.json` :partying\_face: The main theme of this release: **rules that turn themselves on based on the package versions you actually have installed**. Instead of picking a Symfony or PHPUnit set by version number and guessing what applies, register the composer-based set once. Every rule inside checks `composer.json`/`installed.json` and only runs if the installed package version matches its constraint. ```php use Rector\Config\RectorConfig; return RectorConfig::configure() ->withComposerBased( doctrine: true, phpunit: true, symfony: true, twig: true, ); ``` <br> We're working on full coverage. At the moment, PHPUnit and Symfony rules are already migrated to this approach. Not only rules, but also **rule configuration** can be bound to a package version: ```php $rectorConfig->ruleWithConfigurationComposerVersionBound( SomeRector::class, [...], 'phpunit/phpunit', '>=11.0' ); ``` <br> To see what is active and why, there is a new command: ```bash vendor/bin/rector composer-based ``` ``` Composer package bound rules ------------------------------- ----------------- ---------- ----------- -------- Rule Package Requires Installed Active ------------------------------- ----------------- ---------- ----------- -------- RemoveExpectAnyFromMockRector phpunit/phpunit >=11.0 11.5.2 yes RedirectToRouteRector symfony/... >=2.6 7.2.1 yes ------------------------------- ----------------- ---------- ----------- -------- ! [NOTE] 2 of 2 composer package bound items are active ``` <br> And to run *only* those rules in a single process: ```bash vendor/bin/rector process --composer-based ``` <br> #### New features :partying_face: - \[Config] Add `ruleWithConfigurationComposerVersionBound()` ([#&#8203;8244]) - \[composer-based] Add `composer-based` command ([#&#8203;8246]) - \[composer-based] Report rule configuration bound to installed package version ([#&#8203;8247]) - \[composer-based] Register each rule only once, add `--composer-based` process filter ([#&#8203;8248]) - \[Configuration] Load single composer-based PHPUnit set in `withComposerBased()` ([#&#8203;8255]) - \[Configuration] Load single composer-based Symfony set in `withComposerBased()` ([#&#8203;8259]) - \[Console] Print composer-based rule configuration on separate full-width line ([#&#8203;8256]) - \[Testing] Allow a test case to resolve package versions from a standalone `composer.json` ([#&#8203;8264]) <br> #### New rules :tada: **rector-src** - \[DeadCode] `RemoveTestsOverriddenPrivateMethodParameterRector` ([#&#8203;8254]) **rector-phpunit** - \[CodeQuality] `AddIntersectionParamToMockObjectParamRector` ([#&#8203;755]) - \[PHPUnit 11.0] `ExpectsParamToMockObjectRector` — for private test method params ([#&#8203;753]) - \[PHPUnit 11.0] `MockObjectArgCreateStubToCreateMockRector` ([#&#8203;741]) - \[PHPUnit 11.5] `AssertContainsOnlyMethodCallRector` ([#&#8203;738]) **rector-symfony** - \[CodeQuality] `LoadValidatorMetadataToAttributeRector` ([#&#8203;988]) <br> #### Bugfixes :bug: - \[DeadCode] Skip `RecastingRemovalRector` on array dim fetch value ([#&#8203;8262]) - \[DeadCode] Skip `RemoveDefaultValueFromAssignedPropertyRector` on early return in constructor-called method ([#&#8203;8261]) - \[DeadCode] Skip static property in `RemoveDefaultValueFromAssignedPropertyRector` ([#&#8203;8240]) - \[DeadCode] Remove whole assign statement on unused `createStub()` in tests ([#&#8203;8257]) - \[NodeAnalyzer] Detect always terminated stmts with statements before the return ([#&#8203;8260]) - \[Configuration] Resolve `--only` rule name with shell-eaten backslashes ([#&#8203;8267]) - \[rector-symfony] Add try/catch fixtures with statements before the return ([#&#8203;986]) ```bash # before: quotes were needed to match rule vendor/bin/rector p --only="\Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector" # after: simple class name works as well vendor/bin/rector p --only \Rector\CodeQuality\Rector\FuncCall\ChangeArrayPushToArrayAssignRector ``` - \[Composer] Prefer `composer.json` constraint over outdated `installed.json` version ([#&#8203;8242]) - Fix `InstalledPackageResolver` cwd fallback lost by promoted property ([#&#8203;8237]) - \[rector-phpunit] Fix swapped `preCondition` and `postCondition` attribute mapping ([#&#8203;746]) - \[rector-phpunit] Handle test traits in `DataProviderAnnotationToAttributeRector` ([#&#8203;751], [#&#8203;752]) <br> #### Set changes :chart_with_upwards_trend: - \[Config] Move 3 rules from coding style set to their proper sets — `ExplicitPublicClassMethodRector` to PHP 5.3, plus one each to code quality and dead code ([#&#8203;8266]) - \[CodingStyle] Remove `MinMaxToClampRector` from coding style level ([#&#8203;8270]) - \[rector-symfony] Add `SymfonySetList::COMPOSER_BASED` ([#&#8203;982]) - \[rector-phpunit] Register composer-based set in `PHPUnitSetProvider` ([#&#8203;748]) <br> #### Deprecations :skull: Deprecated rules still run, but print a w and will be removed in a future major release. These were deprecated as not part of any set, risky, opinionated or excluded by most users. Goal is to make Rector useful more to masses and every day user by having valuable and reliable rules. **rector-src** - `EncapsedStringsToSprintfRector` ([#&#8203;8265]) - `SimplifyRegexPatternRector` ([#&#8203;8263]) - `BinaryOpStandaloneAssignsToDirectRector` ([#&#8203;8269]) - `NullableCompareToNullRector` ([#&#8203;8268]) - `NestedTernaryToMatchRector` ([#&#8203;8241]) - `AddReturnDocblockFromMethodCallDocblockRector` ([#&#8203;8239]) - Gmagick to Imagick set ([#&#8203;8252]) - `withPhp53Sets()` ... `withPhp74Sets()` — use `withPhpLevel()` instead ([#&#8203;8253]) - `cacheMetaExtension()` — reports a warning when used ([#&#8203;8251]) **rector-doctrine** - `YamlToAttributeDoctrineMappingRector` ([#&#8203;492]) - `DoctrineSetList::YAML_TO_ANNOTATIONS` set ([#&#8203;493]) **rector-symfony** - `TemplateAnnotationToThisRenderRector` ([#&#8203;989]) - `ReturnDirectJsonResponseRector` ([#&#8203;987]) - `AutowireAttributeRector` ([#&#8203;981]) **rector-phpunit** - `WillReturnCallbackFallbackToThrowRector` ([#&#8203;740]) - `ReplaceTestFunctionPrefixWithAttributeRector` ([#&#8203;739]) <br> #### Removals :skull: - \[depre] Remove `strict-booleans` set, deprecated since 2025-10 ([#&#8203;8243]) - \[ChangesReporting] Remove `junit` output format ([#&#8203;8250]) - \[rector-doctrine] Remove `DoctrineDocBlockResolver`, deprecated since 2025-05 ([#&#8203;491]) - \[rector-symfony] Remove `StringExtensionToConfigBuilderRector`, deprecated since 2025-10 ([#&#8203;978]) - \[rector-phpunit] Remove 4 rules deprecated since 2025-10 ([#&#8203;743]) - \[rector-phpunit] Remove deprecated `AssertPropertyExistsRector` ([#&#8203;742]) <br> #### Package bonding (composer-based rollout) - \[rector-symfony] Bond version-specific rules to composer package constraints ([#&#8203;979]), include all configured rules in the composer-based set ([#&#8203;980]), bond `AddViolationToBuildViolationRector` to `symfony/validator` 2.5 ([#&#8203;983]), add `AuthorizationCheckerIsGrantedExtractorRector` to the composer-based set ([#&#8203;985]), bond `RedirectToRouteRector` to `symfony/framework-bundle` 2.6 ([#&#8203;991]) - \[rector-phpunit] Bond version-specific rules to composer package constraints ([#&#8203;754]), bond stub and mock rules to `phpunit/phpunit` >=11.0 ([#&#8203;750]), bond annotation-to-attribute rules to `phpunit/phpunit` >=10.0 ([#&#8203;744], [#&#8203;745]), move composer version bound rules to composer-based set ([#&#8203;747]) <br> [#&#8203;8237]: https://github.com/rectorphp/rector-src/pull/8237 [#&#8203;8239]: https://github.com/rectorphp/rector-src/pull/8239 [#&#8203;8240]: https://github.com/rectorphp/rector-src/pull/8240 [#&#8203;8241]: https://github.com/rectorphp/rector-src/pull/8241 [#&#8203;8242]: https://github.com/rectorphp/rector-src/pull/8242 [#&#8203;8243]: https://github.com/rectorphp/rector-src/pull/8243 [#&#8203;8244]: https://github.com/rectorphp/rector-src/pull/8244 [#&#8203;8245]: https://github.com/rectorphp/rector-src/pull/8245 [#&#8203;8246]: https://github.com/rectorphp/rector-src/pull/8246 [#&#8203;8247]: https://github.com/rectorphp/rector-src/pull/8247 [#&#8203;8248]: https://github.com/rectorphp/rector-src/pull/8248 [#&#8203;8250]: https://github.com/rectorphp/rector-src/pull/8250 [#&#8203;8251]: https://github.com/rectorphp/rector-src/pull/8251 [#&#8203;8252]: https://github.com/rectorphp/rector-src/pull/8252 [#&#8203;8253]: https://github.com/rectorphp/rector-src/pull/8253 [#&#8203;8254]: https://github.com/rectorphp/rector-src/pull/8254 [#&#8203;8255]: https://github.com/rectorphp/rector-src/pull/8255 [#&#8203;8256]: https://github.com/rectorphp/rector-src/pull/8256 [#&#8203;8257]: https://github.com/rectorphp/rector-src/pull/8257 [#&#8203;8259]: https://github.com/rectorphp/rector-src/pull/8259 [#&#8203;8260]: https://github.com/rectorphp/rector-src/pull/8260 [#&#8203;8261]: https://github.com/rectorphp/rector-src/pull/8261 [#&#8203;8262]: https://github.com/rectorphp/rector-src/pull/8262 [#&#8203;8263]: https://github.com/rectorphp/rector-src/pull/8263 [#&#8203;8264]: https://github.com/rectorphp/rector-src/pull/8264 [#&#8203;8265]: https://github.com/rectorphp/rector-src/pull/8265 [#&#8203;8266]: https://github.com/rectorphp/rector-src/pull/8266 [#&#8203;8267]: https://github.com/rectorphp/rector-src/pull/8267 [#&#8203;8268]: https://github.com/rectorphp/rector-src/pull/8268 [#&#8203;8269]: https://github.com/rectorphp/rector-src/pull/8269 [#&#8203;8270]: https://github.com/rectorphp/rector-src/pull/8270 [#&#8203;491]: https://github.com/rectorphp/rector-doctrine/pull/491 [#&#8203;492]: https://github.com/rectorphp/rector-doctrine/pull/492 [#&#8203;493]: https://github.com/rectorphp/rector-doctrine/pull/493 [#&#8203;494]: https://github.com/rectorphp/rector-doctrine/pull/494 [#&#8203;978]: https://github.com/rectorphp/rector-symfony/pull/978 [#&#8203;979]: https://github.com/rectorphp/rector-symfony/pull/979 [#&#8203;980]: https://github.com/rectorphp/rector-symfony/pull/980 [#&#8203;981]: https://github.com/rectorphp/rector-symfony/pull/981 [#&#8203;982]: https://github.com/rectorphp/rector-symfony/pull/982 [#&#8203;983]: https://github.com/rectorphp/rector-symfony/pull/983 [#&#8203;984]: https://github.com/rectorphp/rector-symfony/pull/984 [#&#8203;985]: https://github.com/rectorphp/rector-symfony/pull/985 [#&#8203;986]: https://github.com/rectorphp/rector-symfony/pull/986 [#&#8203;987]: https://github.com/rectorphp/rector-symfony/pull/987 [#&#8203;988]: https://github.com/rectorphp/rector-symfony/pull/988 [#&#8203;989]: https://github.com/rectorphp/rector-symfony/pull/989 [#&#8203;991]: https://github.com/rectorphp/rector-symfony/pull/991 [#&#8203;738]: https://github.com/rectorphp/rector-phpunit/pull/738 [#&#8203;739]: https://github.com/rectorphp/rector-phpunit/pull/739 [#&#8203;740]: https://github.com/rectorphp/rector-phpunit/pull/740 [#&#8203;741]: https://github.com/rectorphp/rector-phpunit/pull/741 [#&#8203;742]: https://github.com/rectorphp/rector-phpunit/pull/742 [#&#8203;743]: https://github.com/rectorphp/rector-phpunit/pull/743 [#&#8203;744]: https://github.com/rectorphp/rector-phpunit/pull/744 [#&#8203;745]: https://github.com/rectorphp/rector-phpunit/pull/745 [#&#8203;746]: https://github.com/rectorphp/rector-phpunit/pull/746 [#&#8203;747]: https://github.com/rectorphp/rector-phpunit/pull/747 [#&#8203;748]: https://github.com/rectorphp/rector-phpunit/pull/748 [#&#8203;750]: https://github.com/rectorphp/rector-phpunit/pull/750 [#&#8203;751]: https://github.com/rectorphp/rector-phpunit/pull/751 [#&#8203;752]: https://github.com/rectorphp/rector-phpunit/pull/752 [#&#8203;753]: https://github.com/rectorphp/rector-phpunit/pull/753 [#&#8203;754]: https://github.com/rectorphp/rector-phpunit/pull/754 [#&#8203;755]: https://github.com/rectorphp/rector-phpunit/pull/755 ### [`v2.5.9`](https://github.com/rectorphp/rector/releases/tag/2.5.9): Released Rector 2.5.9 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.8...2.5.9) #### Bugfixes :bug: - \[DeadCode] Remove unreachable class-like checks in `Class_`-only rules ([#&#8203;8217](https://github.com/rectorphp/rector-src/pull/8217)) - \[CodingStyle] Use native php-parser node API over class reflection ([#&#8203;8218](https://github.com/rectorphp/rector-src/pull/8218)) - \[Php80] Remove `AstResolver` usage on `AddParamBasedOnParentClassMethodRector` ([#&#8203;8196](https://github.com/rectorphp/rector-src/pull/8196)) - Wire `RichParser` node visitors via DI factory instead of private property hack ([#&#8203;8215](https://github.com/rectorphp/rector-src/pull/8215)) - \[Php80] Skip promoting a property the parent declares without a native type in `ClassPropertyAssignToConstructorPromotionRector` ([#&#8203;8232](https://github.com/rectorphp/rector-src/pull/8232)) - \[DeadCode] Keep empty `__construct()` in anonymous class that extends parent on `RemoveEmptyClassMethodRector` ([#&#8203;8219](https://github.com/rectorphp/rector-src/pull/8219)) - \[DeadCode] Skip negative zero on `RemoveDeadZeroAndOneOperationRector` ([#&#8203;8213](https://github.com/rectorphp/rector-src/pull/8213)) - \[DeadCode] Skip protected property on non-final class on `RemoveDefaultValueFromAssignedPropertyRector` ([#&#8203;8214](https://github.com/rectorphp/rector-src/pull/8214)) - \[DeadCode] Skip array dim fetch assign on `RemoveDefaultValueFromAssignedPropertyRector` ([#&#8203;8212](https://github.com/rectorphp/rector-src/pull/8212)) - \[DeadCode] Skip if/else in loop on `RemoveDefaultValueFromAssignedPropertyRector` ([#&#8203;8211](https://github.com/rectorphp/rector-src/pull/8211)) - \[DeadCode] Skip early return in constructor on `RemoveDefaultValueFromAssignedPropertyRector` ([#&#8203;8209](https://github.com/rectorphp/rector-src/pull/8209)) <br> #### Set changes :wastebasket: ##### `NullToStrictStringFuncCallArgRector` out of the PHP 8.1 set ([#&#8203;8234](https://github.com/rectorphp/rector-src/pull/8234)) The rule and all its fixtures stay, so it can still be opted into: ```php ->withRules([NullToStrictStringFuncCallArgRector::class]) ``` <br> #### Deprecations :skull: ##### `TypeDeclarationDocblocks`: 3 data provider docblock rules ([#&#8203;8235](https://github.com/rectorphp/rector-src/pull/8235)) Data provider docblock typing is not relevant to code quality — it increases maintenance cost and decreases readability of the test class. Deprecated rules: - `AddReturnArrayDocblockFromDataProviderParamRector` - `AddReturnDocblockDataProviderRector` - `AddParamArrayDocblockFromDataProviderRector` <br> #### rectorphp/rector-symfony :musical_note: - \[Symfony72] Match `push()` to its own `RequestStack` variable in `PushRequestToRequestStackConstructorRector` ([#&#8203;971](https://github.com/rectorphp/rector-symfony/pull/971)) - \[Symfony44] Skip custom `isGranted()` service calls in controllers in `AuthorizationCheckerIsGrantedExtractorRector` ([#&#8203;973](https://github.com/rectorphp/rector-symfony/pull/973)) - \[Symfony42] Update `Cookie` fixture after `NewToStaticCallRector` config removal ([#&#8203;974](https://github.com/rectorphp/rector-symfony/pull/974)) - Drop `rector/type-perfect`, its rules ship in `tomasvotruba/type-coverage` 2.3 now ([#&#8203;972](https://github.com/rectorphp/rector-symfony/pull/972)) - Bump dev dependencies, PHPUnit 13 ([#&#8203;976](https://github.com/rectorphp/rector-symfony/pull/976)) - \[deps] Bump `symfony/config` to `^8.1` ([#&#8203;977](https://github.com/rectorphp/rector-symfony/pull/977)) ##### Deprecated: `SimplifyFormRenderingRector` ([#&#8203;975](https://github.com/rectorphp/rector-symfony/pull/975)) The rule removed the explicit `->createView()` call when a form was passed to `render()`: Symfony supports passing the `FormInterface` directly, but the shorthand is ambiguous and breaks dynamic forms: forms modified in `PRE_SET_DATA`/`POST_SUBMIT` listeners and submitted over AJAX end up with a 422 response and no clear error. Keeping the explicit `->createView()` call is the reliable form. See [symfony/symfony#50542](https://github.com/symfony/symfony/issues/50542). <br> #### rectorphp/rector-phpunit :test_tube: - \[PHPUnit 13] Fix class in `expectExceptionMessage()` rename to `TestCase` ([#&#8203;735](https://github.com/rectorphp/rector-phpunit/pull/735)) <br> #### rectorphp/rector-downgrade-php :arrow_down: - \[DowngradePhp81] Reference `MHASH_*` constants by name in `DowngradeHashAlgorithmXxHashRector` to fix PHP 8.5 deprecation ([#&#8203;386](https://github.com/rectorphp/rector-downgrade-php/pull/386)) ### [`v2.5.8`](https://github.com/rectorphp/rector/releases/tag/2.5.8): Released Rector 2.5.8 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.7...2.5.8) #### New Features :partying\_face: - \[dx] Add "if" set with if/else/ternary rules ([#&#8203;8199](https://github.com/rectorphp/rector-src/pull/8199)) - \[DeadCode] Add RemoveDeadInstanceOfAssertRector ([#&#8203;8202](https://github.com/rectorphp/rector-src/pull/8202)) - \[DeadCode] Add RemoveDoubleSelfAssignRector ([#&#8203;8203](https://github.com/rectorphp/rector-src/pull/8203)) - \[DeadCode] Add RemoveParentDelegatingClassMethodRector ([#&#8203;8204](https://github.com/rectorphp/rector-src/pull/8204)) - \[DeadCode] Add RemoveDefaultValueFromAssignedPropertyRector ([#&#8203;8207](https://github.com/rectorphp/rector-src/pull/8207)) - \[TypeDeclaration] Fix incomplete type on yield variable + yield from in AddParamTypeBasedOnPHPUnitDataProviderRector ([#&#8203;8206](https://github.com/rectorphp/rector-src/pull/8206)) <br> #### Bugfixes :bug: - Fix LogicalToBooleanRector: parenthesize assignments nested under unary/binary operators ([#&#8203;8184](https://github.com/rectorphp/rector-src/pull/8184)) - \[TypeDeclaration] Skip trait methods on ParamTypeByMethodCallType rules ([#&#8203;8189](https://github.com/rectorphp/rector-src/pull/8189)) - \[Php80] Skip promotion when property type is wider than constructor param on ClassPropertyAssignToConstructorPromotionRector ([#&#8203;8170](https://github.com/rectorphp/rector-src/pull/8170)), Thanks [@&#8203;ximki-vinki](https://github.com/ximki-vinki)! - \[Php85] Skip outer spread on NestedFuncCallsToPipeOperatorRector ([#&#8203;8191](https://github.com/rectorphp/rector-src/pull/8191)) - \[DeadCode] Fix crash on float version arg in ConditionResolver ([#&#8203;8192](https://github.com/rectorphp/rector-src/pull/8192)) - Make NestedFuncCallsToPipeOperatorRector minimum depth configurable ([#&#8203;8193](https://github.com/rectorphp/rector-src/pull/8193)) - Fix codeception data provider detection ([#&#8203;8194](https://github.com/rectorphp/rector-src/pull/8194)), Thanks [@&#8203;d-mitrofanov-v](https://github.com/d-mitrofanov-v)! - Make PHPStan DI-Container available in bootstrap files ([#&#8203;8190](https://github.com/rectorphp/rector-src/pull/8190)), Thanks [@&#8203;staabm](https://github.com/staabm)! - \[Privatization] Skip Symfony Command protected static property in PrivatizeFinalClassPropertyRector ([#&#8203;8201](https://github.com/rectorphp/rector-src/pull/8201)) - Bump to PHPStan ^2.2.6 and Fix its Container compatibility in RichParser ([#&#8203;8208](https://github.com/rectorphp/rector-src/pull/8208)) <br> #### Removed :skull: - skip @&#8203; return this on RemoveReturnTagIncompatibleWithNativeTypeRector on Traits ([#&#8203;8185](https://github.com/rectorphp/rector-src/pull/8185)) - \[DeadCode] Skip string scalar sub type on RemoveReturnTagIncompatibleWithNativeTypeRector ([#&#8203;8186](https://github.com/rectorphp/rector-src/pull/8186)) <br> #### rectorphp/rector-symfony :musical_note: - \[Symfony73] Remove empty configure() method in CommandHelpToAttributeRector ([#&#8203;969](https://github.com/rectorphp/rector-symfony/pull/969)) - \[Symfony73] Keep AbstractExtension when Twig extension overrides a built-in function/filter ([#&#8203;968](https://github.com/rectorphp/rector-symfony/pull/968)) - \[Symfony73] Wrap scalar groups option in array in ConstraintOptionsToNamedArgumentsRector ([#&#8203;967](https://github.com/rectorphp/rector-symfony/pull/967)) - \[Symfony61] Remove empty configure() method even with empty body ([#&#8203;966](https://github.com/rectorphp/rector-symfony/pull/966)) - \[Symfony61] Remove now empty configure() method in CommandConfigureToAttributeRector ([#&#8203;965](https://github.com/rectorphp/rector-symfony/pull/965)) - \[CodeQuality] Respect typeGuardedClasses and skip closure-only returns in ResponseReturnTypeControllerActionRector ([#&#8203;964](https://github.com/rectorphp/rector-symfony/pull/964)) - \[Symfony44] Return 1 instead of (int) false in ConsoleExecuteReturnIntRector ([#&#8203;963](https://github.com/rectorphp/rector-symfony/pull/963)) - \[CodeQuality] Add union and method call return type support to ResponseReturnTypeControllerActionRector ([#&#8203;961](https://github.com/rectorphp/rector-symfony/pull/961)) - \[Twig30] Add new set for Twig 30 ([#&#8203;960](https://github.com/rectorphp/rector-symfony/pull/960)), Thanks [@&#8203;MrYamous](https://github.com/MrYamous) <br> #### rectorphp/rector-doctrine :orange_circle: - \[DataFixtures 17] add new set for doctrine data-fixtures 17 ([#&#8203;487](https://github.com/rectorphp/rector-doctrine/pull/487)), Thanks [@&#8203;MrYamous](https://github.com/MrYamous) <br> #### rectorphp/rector-phpunit :green_circle: - \[PHPUnit 13] Add PHPUnit 13 config set ([#&#8203;733](https://github.com/rectorphp/rector-phpunit/pull/733)) - \[CodeQuality] Skip super global variables on AssertIssetToSpecificMethodRector ([#&#8203;732](https://github.com/rectorphp/rector-phpunit/pull/732)) - \[CodeQuality] Skip anonymous classes in AssertClassToThisAssertRector ([#&#8203;729](https://github.com/rectorphp/rector-phpunit/pull/729)) - \[CodeQuality] Move AssertClassToThisAssertRector hook from Class\_ to ClassMethod ([#&#8203;728](https://github.com/rectorphp/rector-phpunit/pull/728)) - AssertEqualsToSameRector: skip arrays whose actual value key order is not provably identical ([#&#8203;727](https://github.com/rectorphp/rector-phpunit/pull/727)) ### [`v2.5.7`](https://github.com/rectorphp/rector/releases/tag/2.5.7): Released Rector 2.5.7 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.6...2.5.7) This release sharpens the PHPUnit code-quality sets, adds a focused **narrow asserts** set, deprecates two blurry Symfony web-test rules, and fixes a handful of docblock false-positives in dead-code removal. #### New Features 🎉 ##### PHPUnit: `PHPUNIT_NARROW_ASSERTS` set A new set focused on narrowing broad asserts to their specific, more descriptive method — e.g. `assertTrue(isset($a['b']))` → `assertArrayHasKey('b', $a)`. ([rector-phpunit #&#8203;716]) ```php use Rector\PHPUnit\Set\PHPUnitSetList; return RectorConfig::configure() ->withSets([PHPUnitSetList::PHPUNIT_NARROW_ASSERTS]); ``` <br> ##### `withPreparedSets()` gains `phpunitNarrowAsserts` + `phpunitMockToStub` The 2 PHPUnit sets are now toggleable like any other prepared set. ([#&#8203;8178]) ```php return RectorConfig::configure() ->withPreparedSets( phpunitNarrowAsserts: true, phpunitMockToStub: true, ); ``` <br> ##### PHPUnit: flip `with($this->callback(...))` on void methods to `willReturnCallback()` `VoidMethodWithCallbackToWillReturnCallbackRector` (renamed + refocused) drops the pointless `return` value and types the closure as `void`, matching the mocked void method. ([rector-phpunit #&#8203;724]) ```diff $this->createMock(SomeClass::class) ->method('run') - ->with($this->callback(function ($arg) { - echo $arg; - - return true; - })); + ->willReturnCallback(function ($arg): void { + echo $arg; + }); ``` ##### Console: `-v` as alias for `--version` Since the `verbose` option was removed, `-v` now prints the version. ([#&#8203;8177]) ```bash vendor/bin/rector -v # Rector 2.x.x ``` <br> #### Improvements 🔧 - **\[StaticTypeMapper]** Map phpstan-special scalar types (`literal-string`, `numeric-string`, …) to their real PHPStan types instead of a bogus `ObjectType`, so precise docblocks survive dead-code cleanup ([#&#8203;8176]) - **\[PHPUnit CodeQuality]** Verify assert method name exists on the `Assert` class via reflection before transforming ([rector-phpunit #&#8203;720]) - **\[PHPUnit CodeQuality]** Simplify single-statement void callback in `CallbackSingleAssertToSimplerRector` ([rector-phpunit #&#8203;722]) - **\[PHPUnit CodeQuality]** Collapse all instanceof asserts for multiple nullable instances in a single run ([rector-phpunit #&#8203;721]) - **\[PHPUnit CodeQuality]** Use `atLeast()` instead of `exactly()` in `DecorateWillReturnMapWithExpectsMockRector` ([rector-phpunit #&#8203;719]) <br> #### Bug Fixes 🐛 - **\[DeadCode]** Preserve generic `@return` tags in `RemoveReturnTagIncompatibleWithNativeTypeRector` ([#&#8203;8183]) - **\[DeadCode]** Skip templated type in `RemoveReturnTagIncompatibleWithNativeTypeRector` ([#&#8203;8180]) - **\[DeadCode]** Skip PHPStan type alias in `RemoveReturnTagIncompatibleWithNativeTypeRector` ([#&#8203;8179]) - **\[CodeQuality]** Skip abstract class in `CompleteDynamicPropertiesRector` ([#&#8203;8182]) - **\[Php71]** Skip magic `@method` in `RemoveExtraParametersRector` ([#&#8203;8181]) - **\[PHPUnit]** Skip `with()` multiple arguments in `VoidMethodWithCallbackToWillReturnCallbackRector` ([rector-phpunit #&#8203;725]) - **\[PHPUnit]** Skip `new` object instances in `NarrowIdenticalWithConsecutiveRector` — each `new` is a fresh instance, collapsing them changes intent ([rector-phpunit #&#8203;726]) - **\[PHPUnit]** Skip mock property removal when used in a trait ([rector-phpunit #&#8203;723]) - **\[PHPUnit]** Skip nested value compare in `CallbackSingleAssertToSimplerRector` ([rector-phpunit #&#8203;718]) - **\[PHPUnit]** Skip union types in `AssertEqualsToSameRector` to preserve loose comparison ([rector-phpunit #&#8203;717]) <br> #### Deprecations :skull: ##### Symfony: `WebTestCaseAssertIsSuccessfulRector` + `WebTestCaseAssertResponseCodeRector` Both rules hide the asserted behavior and force a different assert method per status code, splitting one clear assertion into several implicit ones. Asserting the HTTP status code directly is clearer and uniform. ([rector-symfony #&#8203;958]) *** [#&#8203;8176]: https://github.com/rectorphp/rector-src/pull/8176 [#&#8203;8177]: https://github.com/rectorphp/rector-src/pull/8177 [#&#8203;8178]: https://github.com/rectorphp/rector-src/pull/8178 [#&#8203;8179]: https://github.com/rectorphp/rector-src/pull/8179 [#&#8203;8180]: https://github.com/rectorphp/rector-src/pull/8180 [#&#8203;8181]: https://github.com/rectorphp/rector-src/pull/8181 [#&#8203;8182]: https://github.com/rectorphp/rector-src/pull/8182 [#&#8203;8183]: https://github.com/rectorphp/rector-src/pull/8183 [rector-phpunit #&#8203;716]: https://github.com/rectorphp/rector-phpunit/pull/716 [rector-phpunit #&#8203;717]: https://github.com/rectorphp/rector-phpunit/pull/717 [rector-phpunit #&#8203;718]: https://github.com/rectorphp/rector-phpunit/pull/718 [rector-phpunit #&#8203;719]: https://github.com/rectorphp/rector-phpunit/pull/719 [rector-phpunit #&#8203;720]: https://github.com/rectorphp/rector-phpunit/pull/720 [rector-phpunit #&#8203;721]: https://github.com/rectorphp/rector-phpunit/pull/721 [rector-phpunit #&#8203;722]: https://github.com/rectorphp/rector-phpunit/pull/722 [rector-phpunit #&#8203;723]: https://github.com/rectorphp/rector-phpunit/pull/723 [rector-phpunit #&#8203;724]: https://github.com/rectorphp/rector-phpunit/pull/724 [rector-phpunit #&#8203;725]: https://github.com/rectorphp/rector-phpunit/pull/725 [rector-phpunit #&#8203;726]: https://github.com/rectorphp/rector-phpunit/pull/726 [rector-symfony #&#8203;958]: https://github.com/rectorphp/rector-symfony/pull/958 ### [`v2.5.6`](https://github.com/rectorphp/rector/releases/tag/2.5.6): Released Rector 2.5.6 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.5...2.5.6) #### New Features 🥳 - \[DeadCode] Add `RemoveReturnTagIncompatibleWithNativeTypeRector` ([#&#8203;8172](https://github.com/rectorphp/rector-src/pull/8172)) ```diff final class SomeClass { - /** - * @return SomeObject - */ public function getName(): string { return $this->someObject->getName(); } } ``` - \[TypeDeclarationDocblocks] Add `MergePhpstanDocTagIntoNativeRector` to merge `@phpstan-*` doc tags into native tags ([#&#8203;8171](https://github.com/rectorphp/rector-src/pull/8171)) ```diff final class SomeClass { /** - * @var Collection - * - * @phpstan-var Collection<int, string> + * @var Collection<int, string> */ private $items; } ``` #### Bugfixes 🐛 - \[Php81] Skip array dim fetch args in `NullToStrictStringFuncCallArgRector` ([#&#8203;8164](https://github.com/rectorphp/rector-src/pull/8164)) - Fix scoper to clean up prefix under `getRuleDefinition()` method, parts 1–5 ([#&#8203;8165](https://github.com/rectorphp/rector-src/pull/8165), [#&#8203;8166](https://github.com/rectorphp/rector-src/pull/8166), [#&#8203;8167](https://github.com/rectorphp/rector-src/pull/8167), [#&#8203;8168](https://github.com/rectorphp/rector-src/pull/8168), [#&#8203;8169](https://github.com/rectorphp/rector-src/pull/8169)) - Bump `phpstan/phpdoc-parser` to `^2.3.3` ([#&#8203;8174](https://github.com/rectorphp/rector-src/pull/8174)) *** #### PHPUnit 🧪 New rules and changes from [rector-phpunit](https://github.com/rectorphp/rector-phpunit). ##### New Rules - \[CodeQuality] Add `AssertClassToThisAssertRector` ([#&#8203;707](https://github.com/rectorphp/rector-phpunit/pull/707)) ```diff use PHPUnit\Framework\Assert; use PHPUnit\Framework\TestCase; final class SomeClass extends TestCase { public function run() { - Assert::assertEquals('expected', $result); + $this->assertEquals('expected', $result); } } ``` - \[CodeQuality] Add `BareCreateMockAssignToDirectUseRector` — inline a single-use `createMock()` assignment ([#&#8203;708](https://github.com/rectorphp/rector-phpunit/pull/708)) ```diff final class SomeTest extends TestCase { public function test() { - $someObject = $this->createMock(SomeClass::class); - $this->process($someObject); + $this->process($this->createMock(SomeClass::class)); } private function process(SomeClass $someObject): void { } } ``` - \[CodeQuality] Add `WillReturnCallbackFallbackToThrowRector` — throw on an unexpected extra consecutive call ([#&#8203;710](https://github.com/rectorphp/rector-phpunit/pull/710)) ```diff $this->someServiceMock->expects($matcher) ->method('run') ->willReturnCallback(function () use ($matcher) { if ($matcher->numberOfInvocations() === 1) { return 1; } + + throw new \PHPUnit\Framework\Exception(sprintf('Method should not be called for the %dth time', $matcher->numberOfInvocations())); }); ``` - \[CodeQuality] Add `RemoveReturnFromVoidMethodMockCallbackRector` — type a void mock callback and drop its value return ([#&#8203;711](https://github.com/rectorphp/rector-phpunit/pull/711)) ```diff $this->createMock(SomeClass::class) ->method('run') - ->willReturnCallback(function ($arg) { + ->willReturnCallback(function ($arg): void { echo $arg; - - return true; }); ``` *(`SomeClass::run()` returns `void`.)* - \[CodeQuality] Add `CallbackSingleAssertToSimplerRector` — collapse a `with()` callback with a sole `assertSame()` to `equalTo()` ([#&#8203;714](https://github.com/rectorphp/rector-phpunit/pull/714)) ```diff $builder->expects($this->exactly(2)) ->method('add') - ->with($this->callback(function ($type): bool { - $this->assertSame(TextType::class, $type); - - return true; - })); + ->with($this->equalTo(TextType::class)); ``` ##### Improvements - \[CodeQuality] Skip `TestCase` suffix classes in `RemoveNeverUsedMockPropertyRector` ([#&#8203;709](https://github.com/rectorphp/rector-phpunit/pull/709)) - \[CodeQuality] Produce void callbacks with bare return in `WithCallbackIdenticalToStandaloneAssertsRector` ([#&#8203;712](https://github.com/rectorphp/rector-phpunit/pull/712)) - \[CodeQuality] Handle `return throw` and `return null` in void mock callbacks ([#&#8203;713](https://github.com/rectorphp/rector-phpunit/pull/713)) ### [`v2.5.5`](https://github.com/rectorphp/rector/releases/tag/2.5.5): Released Rector 2.5.5 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.4...2.5.5) #### New Features :partying\_face: - \[CodingStyle] Add `AlternativeIfToBracketRector` ([#&#8203;8158](https://github.com/rectorphp/rector-src/pull/8158)) - \[TypeDeclaration] Add PrivateMethodReturnTypeFromStrictNewArrayRector, split private methods out ([#&#8203;8153](https://github.com/rectorphp/rector-src/pull/8153)) - \[CodeQuality] Decopule array and object variants from ExplicitBoolCompareRector ([#&#8203;8162](https://github.com/rectorphp/rector-src/pull/8162)) <br> #### Bugfixes :bug: - \[TypeDeclaration] Fix `AddClosureParamTypeForArrayMapRector` to type closure params from array values, not keys ([#&#8203;8163](https://github.com/rectorphp/rector-src/pull/8163)) - \[Php56] Add missing parentheses for lower-precedence operands in PowToExpRector ([#&#8203;8161](https://github.com/rectorphp/rector-src/pull/8161)) - \[Php80] Keep trailing doc comment after annotation in AnnotationToAttributeRector ([#&#8203;8160](https://github.com/rectorphp/rector-src/pull/8160)) - \[CodeQuality] Skip same boolean in both branches in SimplifyIfReturnBoolRector ([#&#8203;8159](https://github.com/rectorphp/rector-src/pull/8159)) - \[CodeQuality] Skip alternative syntax (if/endif) in ShortenElseIfRector ([#&#8203;8157](https://github.com/rectorphp/rector-src/pull/8157)) - \[EarlyReturn] Split nested && operand into its own early return in ReturnBinaryOrToEarlyReturnRector ([#&#8203;8156](https://github.com/rectorphp/rector-src/pull/8156)) - \[CodeQuality] Preserve parentheses around low-precedence operands in LogicalToBooleanRector ([#&#8203;8155](https://github.com/rectorphp/rector-src/pull/8155)) - \[CodeQuality] Skip inner function referenced as string callable in InnerFunctionToPrivateMethodRector ([#&#8203;8154](https://github.com/rectorphp/rector-src/pull/8154)) - \[CodeQuality] Preserve parentheses around right-side assign in LogicalToBooleanRector ([#&#8203;8152](https://github.com/rectorphp/rector-src/pull/8152)) - \[CodeQuality] Wrap assign on right side of binary op in parentheses in LogicalToBooleanRector ([#&#8203;8151](https://github.com/rectorphp/rector-src/pull/8151)) - \[DeadCode] Keep generic static union docblock in RemoveDuplicatedReturnSelfDocblockRector ([#&#8203;8150](https://github.com/rectorphp/rector-src/pull/8150)) ### [`v2.5.4`](https://github.com/rectorphp/rector/releases/tag/2.5.4): Released Rector 2.5.4 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.3...2.5.4) #### New Features :partying\_face: - \[TypeDeclaration] Add ReturnTypeFromGetRepositoryDocblockRector ([#&#8203;8146](https://github.com/rectorphp/rector-src/pull/8146)) <br> #### Bugfixes :bug: - \[DeadCode] Keep generic @&#8203; var/@&#8203; return self<...> narrowing annotations ([#&#8203;8147](https://github.com/rectorphp/rector-src/pull/8147)) - \[TypeDeclaration] Handle getRepository() return via local variable in ReturnTypeFromGetRepositoryDocblockRector ([#&#8203;8148](https://github.com/rectorphp/rector-src/pull/8148)) ### [`v2.5.3`](https://github.com/rectorphp/rector/releases/tag/2.5.3): Released Rector 2.5.3 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.2...2.5.3) #### New Features :partying\_face: ##### `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 ([#&#8203;8135](https://github.com/rectorphp/rector-src/pull/8135)) ```php return RectorConfig::configure() ->withTypeGuardedClasses([SomeContract::class]); ``` <br> #### New Rules :tada: ##### `NegatedAndsToPositiveOrsRector` (CodeQuality) — simplify a negated "and" to "or" via de Morgan ([#&#8203;8082](https://github.com/rectorphp/rector-src/pull/8082)) ```diff $a = 5; $b = 10; -$result = !($a > 20 && $b <= 50); +$result = $a <= 20 || $b > 50; ``` <br> ##### `ExplicitAttributeNamedArgsRector` (CodeQuality) — positional attribute args → named args ([#&#8203;8079](https://github.com/rectorphp/rector-src/pull/8079)), Thanks @&#8203;DaveLiddament! ```diff -#[SomeAttribute(SomeClass::class, null, ['home'])] +#[SomeAttribute(value: SomeClass::class, only: null, except: ['home'])] class SomeClass { } ``` <br> ##### `SwitchTrueToMatchRector` (CodeQuality) — `switch (true)` of returning cases → `match (true)`, replaces deprecated `SwitchTrueToIfRector` ([#&#8203;8113](https://github.com/rectorphp/rector-src/pull/8113)) ```diff - 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', + }; ``` <br> ##### `RemoveDuplicatedReturnSelfDocblockRector` (DeadCode) — drop `@return` duplicating native self/static ([#&#8203;8087](https://github.com/rectorphp/rector-src/pull/8087)) ```diff final class SomeClass { - /** - * @return $this - */ public function some(): self { return $this; } } ``` <br> ##### `RemoveMixedDocblockOverruledByNativeTypeRector` (DeadCode) — drop `@param mixed` / `@return mixed` overruled by native type ([#&#8203;8089](https://github.com/rectorphp/rector-src/pull/8089)) ```diff - /** - * @param mixed $value - * @return mixed - */ public function run(int $value): string { } ``` <br> ##### `RemoveUselessUnionReturnDocblockRector` (DeadCode) — drop `@return` union broader than a specific native type ([#&#8203;8126](https://github.com/rectorphp/rector-src/pull/8126)) ```diff - /** - * @return bool|mixed|string - */ public function run(): false|string { } ``` <br> ##### `ClosureReturnTypeFromAssertInstanceOfRector` (TypeDeclaration) — add closure return type narrowed by `assertInstanceOf()` ([#&#8203;8115](https://github.com/rectorphp/rector-src/pull/8115)) ```diff - $callback = function (object $object) { + $callback = function (object $object): SomeType { $this->assertInstanceOf(SomeType::class, $object); ``` return $object; }; ``` ```` <br> ##### `TypedPropertyFromContainerGetSetUpRector` (TypeDeclaration) — type property from `@var` when assigned via container `get()` in `setUp()` ([#&#8203;8120](https://github.com/rectorphp/rector-src/pull/8120)) ```diff - /** - * @var SomeService - */ - private $someService; + private SomeService $someService; protected function setUp(): void { $this->someService = static::getContainer()->get(SomeService::class); } ```` <br> ##### `TypedPropertyFromGetRepositorySetUpRector` (TypeDeclaration) — same, for `getRepository()` assignment in `setUp()` ([#&#8203;8124](https://github.com/rectorphp/rector-src/pull/8124)) ```diff - /** - * @var SomeEntityRepository - */ - private $someEntityRepository; + private SomeEntityRepository $someEntityRepository; ``` protected function setUp(): void { $this->someEntityRepository = $this->em->getRepository(SomeEntity::class); } ``` ```` <br> ##### `NarrowBoolDocblockReturnTypeRector` (TypeDeclaration) — narrow `@return bool` to `false`/`true` per native type ([#&#8203;8127](https://github.com/rectorphp/rector-src/pull/8127)) ```diff /** - * @return bool|string[] + * @return false|string[] */ public function run(): false|array ```` <br> ##### `NarrowArrayCollectionUnionReturnDocblockRector` (TypeDeclarationDocblocks) — `Type[]|ArrayCollection` → generic `ArrayCollection<int, Type>` ([#&#8203;8136](https://github.com/rectorphp/rector-src/pull/8136)) ```diff /** - * @return LeadEventLog[]|ArrayCollection + * @return ArrayCollection<int, LeadEventLog> */ public function getSuccessful(): ArrayCollection ``` <br> ##### `AddClosureParamTypeFromVariableCallRector` (TypeDeclaration) — add closure param type from how the closure variable is called ([#&#8203;8142](https://github.com/rectorphp/rector-src/pull/8142)) ```diff -$printItem = function ($item) { +$printItem = function (Item $item) { echo $item->name; }; $printItem(new Item()); ```` <br> ##### rectorphp/rector-symfony :musical_note: ##### `EventSubscriberMethodReturnVoidRector` (CodeQuality) — subscribed event methods must return `void` (event is by-reference) ([#&#8203;949](https://github.com/rectorphp/rector-symfony/pull/949)) ```diff - public function onEvent(Event $event): Event + public function onEvent(Event $event): void { - return $event->setSomething('value'); + $event->setSomething('value'); } ```` <br> ##### rectorphp/rector-phpunit :green_circle: PHPUnit 12 cluster — typing `createMock()` / `createStub()` properties as intersections after the `MockObject` → `Stub` split. ##### `ChangeMockObjectReturnUnionToIntersectionRector` (CodeQuality) — MockObject `@return` union → intersection ([#&#8203;703](https://github.com/rectorphp/rector-phpunit/pull/703)) ```diff /** - * @return Event|\PHPUnit\Framework\MockObject\MockObject + * @return Event&\PHPUnit\Framework\MockObject\MockObject */ private function createEvent(): \PHPUnit\Framework\MockObject\MockObject ``` <br> ##### `AddIntersectionVarToMockObjectPropertyRector` (CodeQuality) — add MockObject intersection `@var` to a native MockObject property ([#&#8203;697](https://github.com/rectorphp/rector-phpunit/pull/697)) ```diff + /** + * @var \PHPUnit\Framework\MockObject\MockObject&\SomeService + */ private \PHPUnit\Framework\MockObject\MockObject $someServiceMock; ``` <br> ##### `AddStubIntersectionVarToStubPropertyRector` (CodeQuality) — add Stub intersection `@var` to a native Stub property ([#&#8203;700](https://github.com/rectorphp/rector-phpunit/pull/700)) ```diff + /** + * @var \PHPUnit\Framework\MockObject\Stub&\SomeService + */ private \PHPUnit\Framework\MockObject\Stub $someServiceStub; ``` <br> ##### `MockObjectVarToStubRector` (PHPUnit120) — on a property retyped to Stub, update `@var` from MockObject to Stub ([#&#8203;689](https://github.com/rectorphp/rector-phpunit/pull/689)) ```diff /** - * @var FieldModel|MockObject + * @var FieldModel|\PHPUnit\Framework\MockObject\Stub */ private \PHPUnit\Framework\MockObject\Stub $leadFieldModel; ``` <br> ##### `BareVarToStubIntersectionRector` (PHPUnit120) — add `&Stub` to a bare single-class `@var` of a Stub property ([#&#8203;690](https://github.com/rectorphp/rector-phpunit/pull/690)) ```diff /** - * @var FormBuilderInterface + * @var FormBuilderInterface&Stub */ private \PHPUnit\Framework\MockObject\Stub $formBuilder; ``` <br> ##### `PreferTestsWithCamelCaseRector` (CodeQuality) — rename PHPUnit test methods to camelCase ([#&#8203;668](https://github.com/rectorphp/rector-phpunit/pull/668)), Thanks @&#8203;Xammie! ```diff - public function test_something() + public function testSomething() { } ``` <br> ##### `PreferTestsWithSnakeCaseRector` (CodeQuality) — rename PHPUnit test methods to snake_case, the opposite convention ([#&#8203;668](https://github.com/rectorphp/rector-phpunit/pull/668)), Thanks @&#8203;Xammie! ```diff - public function testSomething() + public function test_something() { } ``` <br> #### Bugfixes :bug: - `--only` / `--only-suffix` runs now cache under a rule-scoped key ([#&#8203;8075](https://github.com/rectorphp/rector-src/pull/8075)), Thanks [@&#8203;SanderMuller](https://github.com/SanderMuller)! - Fix double clear-cache ([#&#8203;8096](https://github.com/rectorphp/rector-src/pull/8096)) - `ParamTypeByMethodCallTypeRector` split into Object / Scalar / Array rules ([#&#8203;8134](https://github.com/rectorphp/rector-src/pull/8134)) <br> #### Deprecations & Removals :skull: Migrate away - these will be removed in a future release: - `SwitchTrueToIfRector` → use new **`SwitchTrueToMatchRector`** ([#&#8203;8109](https://github.com/rectorphp/rector-src/pull/8109)) - `StrictStringParamConcatRector` — too many false positives ([#&#8203;8090](https://github.com/rectorphp/rector-src/pull/8090)) - `StaticClosureRector` + `StaticArrowFunctionRector` ([#&#8203;8092](https://github.com/rectorphp/rector-src/pull/8092)) - `StaticCallOnNonStaticToInstanceCallRector` — risky change ([#&#8203;8093](https://github.com/rectorphp/rector-src/pull/8093)) - `EnumCaseToPascalCaseRector` — risky change ([#&#8203;8095](https://github.com/rectorphp/rector-src/pull/8095)) - `JoinStringConcatRector` ([#&#8203;8107](https://github.com/rectorphp/rector-src/pull/8107)) - `RemoveTypedPropertyNonMockDocblockRector` — no real value ([#&#8203;8119](https://github.com/rectorphp/rector-src/pull/8119)) - **Removed:** long-deprecated rules (5+ months old) ([#&#8203;8094](https://github.com/rectorphp/rector-src/pull/8094)) <br> **rectorphp/rector-symfony** - `ParameterBagToAutowireAttributeRector` ([#&#8203;954](https://github.com/rectorphp/rector-symfony/pull/954)) - `AddRouteAnnotationRector` ([#&#8203;952](https://github.com/rectorphp/rector-symfony/pull/952)) **rectorphp/rector-phpunit** - `BehatPHPUnitAssertToWebmozartRector` — too narrow ([#&#8203;686](https://github.com/rectorphp/rector-phpunit/pull/686)) ### [`v2.5.2`](https://github.com/rectorphp/rector/releases/tag/2.5.2): Released Rector 2.5.2 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.1...2.5.2) #### Bugfixes 🐛 - **Match class + path in unused-skip reporting** — fix combined `class => [paths]` skips being wrongly flagged as unused ([#&#8203;8073](https://github.com/rectorphp/rector-src/pull/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 ([#&#8203;8076](https://github.com/rectorphp/rector-src/pull/8076)) - **Improve unused-skip resolver methods** — cleaner resolution internals ([#&#8203;8072](https://github.com/rectorphp/rector-src/pull/8072)) - **Track used skips as `class => [paths]` map** — richer per-path skip tracking backing the report ([#&#8203;8074](https://github.com/rectorphp/rector-src/pull/8074)) ### [`v2.5.1`](https://github.com/rectorphp/rector/releases/tag/2.5.1): Released Rector 2.5.1 [Compare Source](https://github.com/rectorphp/rector/compare/2.5.0...2.5.1) #### Bugfixes 🐛 - **Skip unused-skip reporting on narrowed runs** - no more false "unused skip" noise when running Rector on a subset of paths ([#&#8203;8069](https://github.com/rectorphp/rector-src/pull/8069)) - **Display skips only on uncached run** - skip report shows on real runs, not when results come from cache ([#&#8203;8071](https://github.com/rectorphp/rector-src/pull/8071)) - **`RemoveAlwaysTrueIfConditionRector`** — avoid scanning whole new statements on dynamic variable checks; moved logic to `ExprAnalyzer` and bail early on defined variables ([#&#8203;8057](https://github.com/rectorphp/rector-src/pull/8057)) ### [`v2.5.0`](https://github.com/rectorphp/rector/releases/tag/2.5.0): Released Rector 2.5 [Compare Source](https://github.com/rectorphp/rector/compare/2.4.6...2.5.0) #### New Features :partying\_face: :tada: :tada: :tada: This release has 3 interesting new features. Let's look at them: ##### \[dx] Report skips that never matched ([#&#8203;8058](https://github.com/rectorphp/rector-src/pull/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. ```php // rector.php return RectorConfig::configure() ->withSkip([ SimplifyUselessVariableRector::class => [ '*/src/Legacy/*', // still matches — fine '*/NonexistentUnused/*', // matches nothing — stale ], ]) ->reportUnusedSkips(); ``` Run output: ```bash [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** ([#&#8203;8047](https://github.com/rectorphp/rector-src/pull/8047)) You can update your `rector.php` config: ```diff return RectorConfig::configure() - ->withImportNames(removeUnusedImports: true); + ->withImportNames(); ``` In case it's not for you, turn it off: ```diff return RectorConfig::configure() - ->withImportNames(); + ->withImportNames(removeUnusedImports: false); ``` *** ##### **\[dx] Introducing Drupal composer-based sets** ([#&#8203;8041](https://github.com/rectorphp/rector-src/pull/8041)), Thanks [@&#8203;bbrala](https://github.com/bbrala)! If you're using Drupal Rector, you can now enable it's per-version sets via: ```diff return RectorConfig::configure() + ->withComposerBased(drupal: true); ``` To learn more about composer-based-sets, checkout [the documentation](https://getrector.com/documentation/composer-based-sets). <br> ##### New Rules :tada: - \[php 8.4] \[type-declaration] Add `AddArrayAnyAllClosureParamTypeRector` and `NarrowArrayAnyAllNullableParamTypeRector` ([#&#8203;8049](https://github.com/rectorphp/rector-src/pull/8049)) - \[code-quality] Add `MoveInnerFunctionToTopLevelRector` ([#&#8203;8042](https://github.com/rectorphp/rector-src/pull/8042)) - \[code-quality] Add `NewArrayItemConcatAssignToAssignRector` ([#&#8203;8045](https://github.com/rectorphp/rector-src/pull/8045)) - \[code-quality] Add `FixClassCaseSensitivityVarDocblockRector` ([#&#8203;8046](https://github.com/rectorphp/rector-src/pull/8046)) - \[polyfills] add missing polyfill to PHP 8.4 array functions ([#&#8203;8052](https://github.com/rectorphp/rector-src/pull/8052)) - \[rector] Add `AddParamTypeToRefactorMethodRector` if missing ([#&#8203;8061](https://github.com/rectorphp/rector-src/pull/8061)) <br> #### Bugfixes :bug: - \[internal] Streamline use imports management to FileNode ([#&#8203;8040](https://github.com/rectorphp/rector-src/pull/8040)) - \[PostRector] Do not keep an unused import matched only by a partial docblock name's tail ([#&#8203;8043](https://github.com/rectorphp/rector-src/pull/8043)), Thanks [@&#8203;ruudk](https://github.com/ruudk)! - \[CodeQuality] Skip native function on `MoveInnerFunctionToTopLevelRector` ([#&#8203;8044](https://github.com/rectorphp/rector-src/pull/8044)) - Fix `--only` runs caching files as unchanged, hiding pending changes from full runs ([#&#8203;8029](https://github.com/rectorphp/rector-src/pull/8029)), Thanks [@&#8203;SanderMuller](https://github.com/SanderMuller)! - \[fix] Fix `RemoveUnusedPrivateMethodRector` for NeverType ([#&#8203;8050](https://github.com/rectorphp/rector-src/pull/8050)) - \[dead-code] Fix RemoveUnusedVariableAssignRector, allow for SplFileInfo as cleanup on purpose for gc ([#&#8203;8054](https://github.com/rectorphp/rector-src/pull/8054)) - \[fixes] Couple ClassPropertyAssignToConstructorPromotionRector, RemoveAlwaysTrueIfConditionRector and RemoveUnusedVariableAssignRector fixes ([#&#8203;8055](https://github.com/rectorphp/rector-src/pull/8055)) - \[TypeDeclaration]\[DeadCode] Skip class with Doctrine static function mapping (loadMetadata) in TypedPropertyFromAssignsRector and RemoveUnusedPrivatePropertyRector ([#&#8203;8059](https://github.com/rectorphp/rector-src/pull/8059)) - \[TypeDeclaration] Skip class with Doctrine static function mapping (loadMetadata) in TypedPropertyFromStrictConstructorRector ([#&#8203;8060](https://github.com/rectorphp/rector-src/pull/8060)) <br> #### rectorphp/rector-doctrine :orange_circle: - \[NodeAnalyzer] Detect Doctrine static function mapping (loadMetadata) entity in DoctrineEntityDetector ([736bf61](https://github.com/rectorphp/rector-doctrine/commit/736bf61)) ### [`v2.4.6`](https://github.com/rectorphp/rector/releases/tag/2.4.6): Released Rector 2.4.6 [Compare Source](https://github.com/rectorphp/rector/compare/2.4.5...2.4.6) #### New Features :partying\_face: - \[deprecation] Add RenameDeprecatedMethodCallRector inferring rename from [@&#8203;deprecated](https://github.com/deprecated) docblock ([#&#8203;8015](https://github.com/rectorphp/rector-src/pull/8015)) - \[sets] kick of named args set ([#&#8203;8013](https://github.com/rectorphp/rector-src/pull/8013)) ```php # rector.php return (RectorConfig::configure()) ->withPreparedSets(namedArgs: true); ``` - Add Symfony 8 to the set provider collector ([#&#8203;8019](https://github.com/rectorphp/rector-src/pull/8019)), Thanks [@&#8203;mbabker](https://github.com/mbabker)! <br> #### Bugfixes :bug: - \[BetterPhpDocParser] Keep import referenced by @&#8203;see/[@&#8203;uses](https://github.com/uses) tag with a trailing description ([#&#8203;8039](https://github.com/rectorphp/rector-src/pull/8039)), Thanks [@&#8203;ruudk](https://github.com/ruudk)! - \[internals] skip and finalize beforeTraverse() and afterTraverse() as never used, use refactor() instead ([#&#8203;7765](https://github.com/rectorphp/rector-src/pull/7765)) - \[DeadCode] Skip (void) cast with #\[NoDiscard] on target method call on RemoveDeadStmtRector ([#&#8203;8038](https://github.com/rectorphp/rector-src/pull/8038)) - Bump composer/pcre to ^3.4.0 and phpstan/phpstan to ^2.2.2 ([#&#8203;8037](https://github.com/rectorphp/rector-src/pull/8037)) - \[CodeQuality] Handle crash on custom exception not autoloaded on ThrowWithPreviousExceptionRector ([#&#8203;8036](https://github.com/rectorphp/rector-src/pull/8036)) - refactor: extract AutoloadFileParameterResolver from bin, add tests ([#&#8203;8035](https://github.com/rectorphp/rector-src/pull/8035)), Thanks [@&#8203;SanderMuller](https://github.com/SanderMuller)! - Fix cached results surviving a change of `--autoload-file` ([#&#8203;8034](https://github.com/rectorphp/rector-src/pull/8034)), Thanks [@&#8203;SanderMuller](https://github.com/SanderMuller)! - \[CodingStyle] Remove AstResolver usage on ArrowFunctionAndClosureFirstClassCallableGuard ([#&#8203;8031](https://github.com/rectorphp/rector-src/pull/8031)) - \[DeadCode] Remove AstResolver on RemoveParentCallWithoutParentRector ([#&#8203;8032](https://github.com/rectorphp/rector-src/pull/8032)) - \[DeadCode] Skip with use of func\_num\_args() on RemoveNullArgOnNullDefaultParamRector ([#&#8203;8030](https://github.com/rectorphp/rector-src/pull/8030)) - \[Php70] Skip rewriting to $this on static method or static closure on StaticCallOnNonStaticToInstanceCallRector ([#&#8203;8026](https://github.com/rectorphp/rector-src/pull/8026)) - \[ci] add compat test ([#&#8203;8025](https://github.com/rectorphp/rector-src/pull/8025)) - Fix ReplaceArgumentDefaultValueRector generating invalid self:: constant in unrelated classes ([#&#8203;8023](https://github.com/rectorphp/rector-src/pull/8023)) - Fix RemoveDeadIfBlockRector dropping else block when merging empty if with elseif ([#&#8203;8022](https://github.com/rectorphp/rector-src/pull/8022)) - Fix RemoveParentCallWithoutParentRector removing valid call when ancestor hierarchy is unresolvable ([#&#8203;8018](https://github.com/rectorphp/rector-src/pull/8018)) - split of RemoveNullNamedArgOnNullDefaultParamRector to handle only named args ([#&#8203;8014](https://github.com/rectorphp/rector-src/pull/8014)) - Add failing tests ([#&#8203;8012](https://github.com/rectorphp/rector-src/pull/8012)), Thanks [@&#8203;u01jmg3](https://github.com/u01jmg3)! - Update rector/swiss-knife version to ^2.4.1 ([#&#8203;8011](https://github.com/rectorphp/rector-src/pull/8011)) <br> #### rectorphp/rector-symfony :notes: - \[Symfony81] Add new rule for deprecated validator test usages ([#&#8203;948](https://github.com/rectorphp/rector-symfony/pull/948)), Thanks [@&#8203;florianhofsaessC24](https://github.com/florianhofsaessC24)! - fix: only convert Twig extensions fully reducible to AsTwig attributes ([#&#8203;947](https://github.com/rectorphp/rector-symfony/pull/947)) - \[Symfony73] Sort optional parameters last in InvokableCommandInputAttributeRector ([#&#8203;945](https://github.com/rectorphp/rector-symfony/pull/945)) - Add PHPStan rule requiring nested set configs to be imported in parent set config ([#&#8203;943](https://github.com/rectorphp/rector-symfony/pull/943)) - \[Symfony81] Add new rule for Security component ([#&#8203;942](https://github.com/rectorphp/rector-symfony/pull/942)), Thanks [@&#8203;MrYamous](https://github.com/MrYamous)! - Remove unused imports ([#&#8203;941](https://github.com/rectorphp/rector-symfony/pull/941)), Thanks [@&#8203;MrYamous](https://github.com/MrYamous)! - \[Symfony81] Add new rule for Filesystem ([#&#8203;940](https://github.com/rectorphp/rector-symfony/pull/940)), Thanks [@&#8203;MrYamous](https://github.com/MrYamous)! <br> #### rectorphp/rector-phpunit :green_circle: - \[PHPUnit12] Handle crash on property not exists on PropertyCreateMockToCreateStubRector ([#&#8203;681](https://github.com/rectorphp/rector-phpunit/pull/681)) - \[AnnotationsToAttributes] Convert external [@&#8203;depends](https://github.com/depends) ClassName::method to #\[DependsExternal] ([#&#8203;679](https://github.com/rectorphp/rector-phpunit/pull/679)) - \[PHPUnit12] Drop ConstraintValidatorTestCase from AllowMockObjectsWhereParentClassRector triggers ([#&#8203;678](https://github.com/rectorphp/rector-phpunit/pull/678)) <br> #### rectorphp/rector-downgrade-php :arrow_down: - Add DowngradeDomNodeChildNodesForeachRector for null $childNodes before PHP 8.0 ([#&#8203;379](https://github.com/rectorphp/rector-downgrade-php/pull/379)) - Update boundwize/structarmed version to ^0.9 ([#&#8203;378](https://github.com/rectorphp/rector-downgrade-php/pull/378)) - Fix use of existing PhpAttributeAnalyzer service on AddReturnTypeWillChangeAttributeRector ([#&#8203;377](https://github.com/rectorphp/rector-downgrade-php/pull/377)) - Remove no longer exists '--ansi' flag from swiss-knife ([#&#8203;376](https://github.com/rectorphp/rector-downgrade-php/pull/376)) - \[DowngradePhp81] Add AddReturnTypeWillChangeAttributeRector ([#&#8203;372](https://github.com/rectorphp/rector-downgrade-php/pull/372)), Thanks [@&#8203;jquiaios](https://github.com/jquiaios)! </details> <details> <summary>vuejs/core (vue)</summary> ### [`v3.5.41`](https://github.com/vuejs/core/blob/HEAD/CHANGELOG.md#3541-2026-08-05) [Compare Source](https://github.com/vuejs/core/compare/v3.5.40...v3.5.41) ##### Bug Fixes - **compiler-core:** preserve vnode lifecycle in stable v-for ([#&#8203;11682](https://github.com/vuejs/core/issues/11682)) ([02421cd](https://github.com/vuejs/core/commit/02421cdbc4da5dd2eaf39e6c51aa790f9310db62)), closes [#&#8203;9239](https://github.com/vuejs/core/issues/9239) [#&#8203;12569](https://github.com/vuejs/core/issues/12569) - **compiler-sfc:** handle transformed template AST after cache invalidation ([#&#8203;15136](https://github.com/vuejs/core/issues/15136)) ([a4440c0](https://github.com/vuejs/core/commit/a4440c01b96798a23bef12cb6f9ada5ffaba0d3a)), closes [#&#8203;15126](https://github.com/vuejs/core/issues/15126) [#&#8203;15128](https://github.com/vuejs/core/issues/15128) - **custom-element:** preserve nested async mount order ([#&#8203;15154](https://github.com/vuejs/core/issues/15154)) ([71f9ff5](https://github.com/vuejs/core/commit/71f9ff58a2a8748b2c1ec26c55c89f7343b86110)), closes [#&#8203;15153](https://github.com/vuejs/core/issues/15153) - **custom-element:** warn when props override native properties ([#&#8203;12125](https://github.com/vuejs/core/issues/12125)) ([22b53ea](https://github.com/vuejs/core/commit/22b53eafecf56a9fb97f00b8e8b69c90a073d2d4)), closes [#&#8203;12124](https://github.com/vuejs/core/issues/12124) - **runtime-core:** avoid re-fetching resource props with unchanged values ([#&#8203;15105](https://github.com/vuejs/core/issues/15105)) ([a7513a1](https://github.com/vuejs/core/commit/a7513a1a3ed411ccd90bf135c6cba9c9cb2ef10b)) - **runtime-core:** restore SSR setup state when handling async setup result ([#&#8203;15114](https://github.com/vuejs/core/issues/15114)) ([b6191cb](https://github.com/vuejs/core/commit/b6191cbf95c680e076164a319dd987a14de658c1)), closes [#&#8203;15113](https://github.com/vuejs/core/issues/15113) - **scheduler:** avoid stack overflow when flushing very large post cb arrays ([#&#8203;15143](https://github.com/vuejs/core/issues/15143)) ([c04a45d](https://github.com/vuejs/core/commit/c04a45d15498ebba0de3ceae674b88ac43cb9e76)), closes [#&#8203;15142](https://github.com/vuejs/core/issues/15142) - **slots:** handle nullish v-bind slot props ([#&#8203;15177](https://github.com/vuejs/core/issues/15177)) ([2506700](https://github.com/vuejs/core/commit/2506700b289c5277eb465bf959ce0ea23329094d)) - **ssr:** normalize hidden states during hydration ([#&#8203;13125](https://github.com/vuejs/core/issues/13125)) ([4e467d7](https://github.com/vuejs/core/commit/4e467d7ae2cd7d0af031fac8865dcff73cb1cf16)) - **transition:** support transition to teleport component child ([#&#8203;11959](https://github.com/vuejs/core/issues/11959)) ([77061fe](https://github.com/vuejs/core/commit/77061fe88608a5ab77fec705ff65cb81779eb01c)), closes [#&#8203;11910](https://github.com/vuejs/core/issues/11910) - **types:** preserve defineModel inference with factory defaults ([#&#8203;15097](https://github.com/vuejs/core/issues/15097)) ([0516c43](https://github.com/vuejs/core/commit/0516c43284084f0526032a1cc312fb6916bf04fe)), closes [#&#8203;15096](https://github.com/vuejs/core/issues/15096) - **v-model:** preserve text input before hydration ([#&#8203;14411](https://github.com/vuejs/core/issues/14411)) ([2468464](https://github.com/vuejs/core/commit/2468464798a0fc050f86f8fa0bb96a34851bd824)), closes [#&#8203;14403](https://github.com/vuejs/core/issues/14403) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC41LjIiLCJ1cGRhdGVkSW5WZXIiOiI0NC4yNC4zIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->
Update all non-major dependencies
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / versions (pull_request) Successful in 3s
PHP / versions (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 7s
Node / NPM (pull_request) Successful in 16s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m20s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m25s
Static analysis / static-psalm-analysis dev-stable31 (dev-stable31, 8.4) (pull_request) Successful in 1m36s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 1m36s
Static analysis / static-psalm-analysis dev-stable32 (dev-stable32, 8.4) (pull_request) Successful in 1m41s
PHP / PHP 8.1 (8.1) (pull_request) Successful in 50s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 1m27s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 5s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 3m6s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2fd4dbf129
renovate-bot force-pushed renovate/all-minor-patch from 2fd4dbf129
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / versions (pull_request) Successful in 3s
PHP / versions (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 7s
Node / NPM (pull_request) Successful in 16s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m20s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m25s
Static analysis / static-psalm-analysis dev-stable31 (dev-stable31, 8.4) (pull_request) Successful in 1m36s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 1m36s
Static analysis / static-psalm-analysis dev-stable32 (dev-stable32, 8.4) (pull_request) Successful in 1m41s
PHP / PHP 8.1 (8.1) (pull_request) Successful in 50s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 1m27s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 5s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 3m6s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to de9f8b5fdf
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 9s
Static analysis / versions (pull_request) Successful in 5s
PHP / versions (pull_request) Successful in 9s
Node / NPM (pull_request) Successful in 18s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m8s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m34s
Static analysis / static-psalm-analysis dev-stable32 (dev-stable32, 8.4) (pull_request) Successful in 1m50s
Static analysis / static-psalm-analysis dev-stable31 (dev-stable31, 8.4) (pull_request) Successful in 1m56s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 2m9s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m1s
PHP / PHP 8.1 (8.1) (pull_request) Successful in 53s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 1m41s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
2026-08-01 11:32:19 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from de9f8b5fdf
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 9s
Static analysis / versions (pull_request) Successful in 5s
PHP / versions (pull_request) Successful in 9s
Node / NPM (pull_request) Successful in 18s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m8s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m34s
Static analysis / static-psalm-analysis dev-stable32 (dev-stable32, 8.4) (pull_request) Successful in 1m50s
Static analysis / static-psalm-analysis dev-stable31 (dev-stable31, 8.4) (pull_request) Successful in 1m56s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 2m9s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m1s
PHP / PHP 8.1 (8.1) (pull_request) Successful in 53s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 1m41s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
to 2e76967c2c
Some checks failed
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 2s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 2s
PHPUnit SQLite / versions (pull_request) Successful in 5s
PHP / versions (pull_request) Successful in 5s
Static analysis / versions (pull_request) Successful in 7s
Node / NPM (pull_request) Successful in 13s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 45s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 54s
Node / node-summary (pull_request) Successful in 2s
PHP / php-summary (pull_request) Successful in 6s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 1m8s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m16s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Failing after 1m34s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Failing after 3s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 55s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
2026-08-01 13:36:20 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 2e76967c2c
Some checks failed
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 2s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 2s
PHPUnit SQLite / versions (pull_request) Successful in 5s
PHP / versions (pull_request) Successful in 5s
Static analysis / versions (pull_request) Successful in 7s
Node / NPM (pull_request) Successful in 13s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 45s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 54s
Node / node-summary (pull_request) Successful in 2s
PHP / php-summary (pull_request) Successful in 6s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 1m8s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m16s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Failing after 1m34s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Failing after 3s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 55s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
to 62a04240cd
Some checks failed
Lint info.xml / info.xml lint (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 1s
PHP / changes (pull_request) Successful in 1s
PHPUnit SQLite / changes (pull_request) Successful in 19s
Static analysis / changes (pull_request) Successful in 1s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
Node / NPM (pull_request) Successful in 13s
PHPUnit SQLite / versions (pull_request) Successful in 2s
PHP / versions (pull_request) Successful in 10s
Node / node-summary (pull_request) Successful in 1s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 13s
Static analysis / versions (pull_request) Successful in 15s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 9s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 10s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 12s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 5s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Failing after 2s
PHP / php-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Failing after 46s
2026-08-01 16:40:04 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 62a04240cd
Some checks failed
Lint info.xml / info.xml lint (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 1s
PHP / changes (pull_request) Successful in 1s
PHPUnit SQLite / changes (pull_request) Successful in 19s
Static analysis / changes (pull_request) Successful in 1s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
Node / NPM (pull_request) Successful in 13s
PHPUnit SQLite / versions (pull_request) Successful in 2s
PHP / versions (pull_request) Successful in 10s
Node / node-summary (pull_request) Successful in 1s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 13s
Static analysis / versions (pull_request) Successful in 15s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 9s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 10s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 12s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 5s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Failing after 2s
PHP / php-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Failing after 46s
to 9018065ed9
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / versions (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 6s
PHPUnit SQLite / versions (pull_request) Successful in 8s
PHP / versions (pull_request) Successful in 11s
Node / NPM (pull_request) Successful in 15s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 50s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m12s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 1m7s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m16s
Node / node-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 47s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m40s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-01 17:41:31 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 9018065ed9
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 2s
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / versions (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 6s
PHPUnit SQLite / versions (pull_request) Successful in 8s
PHP / versions (pull_request) Successful in 11s
Node / NPM (pull_request) Successful in 15s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 50s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m12s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 1m7s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 1m16s
Node / node-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 47s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m40s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 98867bd072
All checks were successful
Static analysis / changes (pull_request) Successful in 4s
PHPUnit SQLite / changes (pull_request) Successful in 4s
Node / changes (pull_request) Successful in 4s
PHP / changes (pull_request) Successful in 4s
Lint info.xml / info.xml lint (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 10s
Static analysis / versions (pull_request) Successful in 10s
PHP / versions (pull_request) Successful in 10s
Node / NPM (pull_request) Successful in 12s
Node / node-summary (pull_request) Successful in 8s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 27s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 57s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 57s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m28s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-03 05:55:13 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 98867bd072
All checks were successful
Static analysis / changes (pull_request) Successful in 4s
PHPUnit SQLite / changes (pull_request) Successful in 4s
Node / changes (pull_request) Successful in 4s
PHP / changes (pull_request) Successful in 4s
Lint info.xml / info.xml lint (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 10s
Static analysis / versions (pull_request) Successful in 10s
PHP / versions (pull_request) Successful in 10s
Node / NPM (pull_request) Successful in 12s
Node / node-summary (pull_request) Successful in 8s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 27s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 57s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 57s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 1m2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m28s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 8727371adf
All checks were successful
PHP / changes (pull_request) Successful in 5s
Node / changes (pull_request) Successful in 6s
PHPUnit SQLite / changes (pull_request) Successful in 6s
Lint info.xml / info.xml lint (pull_request) Successful in 6s
Static analysis / changes (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 11s
PHP / versions (pull_request) Successful in 9s
PHPUnit SQLite / versions (pull_request) Successful in 7s
Static analysis / versions (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 58s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 47s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 37s
Node / node-summary (pull_request) Successful in 2s
PHP / php-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 5s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m2s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-03 13:58:09 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 8727371adf
All checks were successful
PHP / changes (pull_request) Successful in 5s
Node / changes (pull_request) Successful in 6s
PHPUnit SQLite / changes (pull_request) Successful in 6s
Lint info.xml / info.xml lint (pull_request) Successful in 6s
Static analysis / changes (pull_request) Successful in 5s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 11s
PHP / versions (pull_request) Successful in 9s
PHPUnit SQLite / versions (pull_request) Successful in 7s
Static analysis / versions (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 58s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 47s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 37s
Node / node-summary (pull_request) Successful in 2s
PHP / php-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 5s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m2s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 443a60e2ae
All checks were successful
PHP / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 12s
Static analysis / versions (pull_request) Successful in 12s
Node / NPM (pull_request) Successful in 12s
PHP / versions (pull_request) Successful in 12s
Node / node-summary (pull_request) Successful in 1s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 40s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 43s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 44s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 9s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m15s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-04 22:11:19 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 443a60e2ae
All checks were successful
PHP / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 12s
Static analysis / versions (pull_request) Successful in 12s
Node / NPM (pull_request) Successful in 12s
PHP / versions (pull_request) Successful in 12s
Node / node-summary (pull_request) Successful in 1s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 35s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 40s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 43s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 44s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 9s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m15s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 54274564e6
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 9s
Node / changes (pull_request) Successful in 9s
PHP / changes (pull_request) Successful in 10s
Lint info.xml / info.xml lint (pull_request) Successful in 11s
Static analysis / changes (pull_request) Successful in 2s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 14s
PHP / versions (pull_request) Successful in 12s
Static analysis / versions (pull_request) Successful in 42s
Node / NPM (pull_request) Successful in 57s
Node / node-summary (pull_request) Successful in 6s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 33s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 12s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 10s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 19s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m32s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-05 06:14:31 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 54274564e6
All checks were successful
PHPUnit SQLite / changes (pull_request) Successful in 9s
Node / changes (pull_request) Successful in 9s
PHP / changes (pull_request) Successful in 10s
Lint info.xml / info.xml lint (pull_request) Successful in 11s
Static analysis / changes (pull_request) Successful in 2s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 4s
PHPUnit SQLite / versions (pull_request) Successful in 14s
PHP / versions (pull_request) Successful in 12s
Static analysis / versions (pull_request) Successful in 42s
Node / NPM (pull_request) Successful in 57s
Node / node-summary (pull_request) Successful in 6s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 33s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 12s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 10s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 19s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m32s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 9524166f99
All checks were successful
PHP / changes (pull_request) Successful in 3s
PHPUnit SQLite / changes (pull_request) Successful in 3s
Node / changes (pull_request) Successful in 3s
Static analysis / changes (pull_request) Successful in 1s
Lint info.xml / info.xml lint (pull_request) Successful in 4s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 2s
PHPUnit SQLite / versions (pull_request) Successful in 9s
Static analysis / versions (pull_request) Successful in 9s
PHP / versions (pull_request) Successful in 9s
Node / NPM (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 14s
Node / node-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 2s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 15s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m1s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 5s
2026-08-05 10:16:15 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 9524166f99
All checks were successful
PHP / changes (pull_request) Successful in 3s
PHPUnit SQLite / changes (pull_request) Successful in 3s
Node / changes (pull_request) Successful in 3s
Static analysis / changes (pull_request) Successful in 1s
Lint info.xml / info.xml lint (pull_request) Successful in 4s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 2s
PHPUnit SQLite / versions (pull_request) Successful in 9s
Static analysis / versions (pull_request) Successful in 9s
PHP / versions (pull_request) Successful in 9s
Node / NPM (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 14s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 14s
Node / node-summary (pull_request) Successful in 2s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 2s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 15s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 13s
PHP / php-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 1m1s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 5s
to 5b33a0fd20
All checks were successful
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 18s
Lint info.xml / info.xml lint (pull_request) Successful in 31s
PHP / versions (pull_request) Successful in 14s
PHPUnit SQLite / versions (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 1m11s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 1m12s
Static analysis / versions (pull_request) Successful in 2m54s
Node / node-summary (pull_request) Successful in 12s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 2m30s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 2m30s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 17s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 8s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 8s
PHP / php-summary (pull_request) Successful in 4s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 3m49s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-07 16:25:20 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 5b33a0fd20
All checks were successful
PHP / changes (pull_request) Successful in 2s
Node / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Static analysis / changes (pull_request) Successful in 18s
Lint info.xml / info.xml lint (pull_request) Successful in 31s
PHP / versions (pull_request) Successful in 14s
PHPUnit SQLite / versions (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 1m11s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 1m12s
Static analysis / versions (pull_request) Successful in 2m54s
Node / node-summary (pull_request) Successful in 12s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 2m30s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 2m30s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 17s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 8s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 8s
PHP / php-summary (pull_request) Successful in 4s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 3m49s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
to 24121d8790
All checks were successful
Node / changes (pull_request) Successful in 2s
PHP / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / changes (pull_request) Successful in 1s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 9s
PHP / versions (pull_request) Successful in 10s
Static analysis / versions (pull_request) Successful in 8s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 19s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 19s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 46s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 14s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 8s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 2m12s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
Node / node-summary (pull_request) Successful in 3s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
2026-08-10 16:40:40 -04:00
Compare
renovate-bot force-pushed renovate/all-minor-patch from 24121d8790
All checks were successful
Node / changes (pull_request) Successful in 2s
PHP / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 2s
Lint info.xml / info.xml lint (pull_request) Successful in 3s
Static analysis / changes (pull_request) Successful in 1s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 3s
PHPUnit SQLite / versions (pull_request) Successful in 9s
PHP / versions (pull_request) Successful in 10s
Static analysis / versions (pull_request) Successful in 8s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 19s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 19s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 13s
Node / NPM (pull_request) Successful in 46s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 14s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 8s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 2m12s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
Node / node-summary (pull_request) Successful in 3s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
to fae9bb98f1
All checks were successful
Static analysis / changes (pull_request) Successful in 2s
PHPUnit SQLite / changes (pull_request) Successful in 3s
Node / changes (pull_request) Successful in 3s
PHP / changes (pull_request) Successful in 3s
Lint info.xml / info.xml lint (pull_request) Successful in 4s
REUSE Compliance Check / reuse-compliance-check (pull_request) Successful in 5s
PHPUnit SQLite / versions (pull_request) Successful in 9s
Static analysis / versions (pull_request) Successful in 9s
PHP / versions (pull_request) Successful in 9s
Node / NPM (pull_request) Successful in 13s
PHP / PHP 8.2 (8.2) (pull_request) Successful in 22s
Static analysis / static-psalm-analysis dev-stable33 (dev-stable33, 8.5) (pull_request) Successful in 28s
Node / node-summary (pull_request) Successful in 7s
Static analysis / static-psalm-analysis dev-master (dev-master, 8.5) (pull_request) Successful in 40s
PHP / PHP 8.5 (8.5) (pull_request) Successful in 18s
Static analysis / static-psalm-analysis dev-stable34 (dev-stable34, 8.5) (pull_request) Successful in 44s
PHP / php-summary (pull_request) Successful in 1s
Static analysis / static-psalm-analysis-summary (pull_request) Successful in 1s
PHPUnit SQLite / SQLite PHP 8.5 Nextcloud master (8.5, master) (pull_request) Successful in 55s
PHPUnit SQLite / phpunit-sqlite-summary (pull_request) Successful in 1s
2026-08-12 08:48:54 -04:00
Compare
lukasdotcom deleted branch renovate/all-minor-patch 2026-08-14 17:05:53 -04:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
lukasdotcom/nextcloud-shortcuts!3
No description provided.