Skip to content

[Conductor] Update dev - #120

Merged
pscheit merged 1 commit into
mainfrom
conductor-multiple-vendors-all-87082
Sep 7, 2026
Merged

[Conductor] Update dev#120
pscheit merged 1 commit into
mainfrom
conductor-multiple-vendors-all-87082

Conversation

@private-packagist

@private-packagist private-packagist Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

This PR was automatically generated by Conductor.

The PR contains the changes generated by running the following command:

composer update friendsofphp/php-cs-fixer:v3.95.24 phpstan/phpstan:2.2.13 rector/rector:2.6.6 --with-all-dependencies --minimal-changes

Changelog

friendsofphp/php-cs-fixer (Source: GitHub Releases))

v3.95.24

What's Changed

New Contributors

Full Changelog: v3.95.23...v3.95.24

v3.95.23

What's Changed

  • fix: FunctionsAnalyzer - detect return type of a closure with a use clause by @​lazerg in #​9806

Full Changelog: v3.95.22...v3.95.23

v3.95.22

What's Changed

  • fix: StaticLambdaFixer - do not make a lambda static when it is the direct subject of bindTo() or call() by @​Amoifr in #​9802
  • chore: Utils - fix stableSort() and sortFixers() template types, remove @​phpstan-ignore suppressions by @​kubawerlos in #​9798
  • chore: Implement PHPStan Preg::replaceCallback() extension by @​kubawerlos in #​9799
  • deps: bump phpstan/phpstan from 2.2.8 to 2.2.9 by @​kubawerlos in #​9797

New Contributors

Full Changelog: v3.95.21...v3.95.22

v3.95.21

What's Changed

Full Changelog: v3.95.20...v3.95.21

phpstan/phpstan (Source: GitHub Releases)

2.2.13

Result cache finally becomes usable for monorepo setups. It knows exactly what needs to be reanalysed when PHP files included via "type": "path" Composer dependencies are edited and also when files in scanFiles/scanDirectories are edited. 🔍✏️

Many result cache bugs were squashed 🐛 and the serialization format changed to a much more efficient one. 🏎️

Bleeding edge 🔪

  • Level 5: Report in-place sort calls that cannot change the array (#​6296), #​15126

If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's phpstan.neon:

includes:
	- vendor/phpstan/phpstan/conf/bleedingEdge.neon

Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. Learn more

Improvements 🔧

  • Interpret array shape keys as @​template types when a template of that name is in scope (#​6322), #​15145
    • Allows types like array{TKey: string} with @​template TKey above

Bugfixes 🐛

  • Do not bind a template type to an argument absorbed by another union member (#​6341), #​8441
  • Normalize the result cache meta before comparing it with the restored one (#​6346), #​15125, #​15152
  • Let OpenSslCipherMethodsProvider contribute its own result cache meta (#​6338), thanks @​SanderMuller!
  • Resolve template defaults referencing other templates in composite types (#​6329), thanks @​calebdw!
  • Rename the result cache into place instead of writing it over the old one (#​6349, #​6353), thanks @​SanderMuller!
  • Do not locate symbols declared by the symfony/polyfill-* packages bundled with PHPStan itself (#​6351), #​15150
  • Stop interning TypeCombinator results in the turbo extension (#​6355), #​15151
  • Cover a file newly appearing in a scanDirectories directory (#​6352), #​15149
  • Fixed various bugs where the result cache could become stale (#​6357)
  • Fix result cache invalidation with @​var referenced classes (#​6343), thanks @​Mika-!
  • Re-analyse the files with errors when a Composer package changes (#​6362), #​15164
  • Do not let the exactness of new Foo() reach an inferred template argument (#​6363), #​15166
  • Invalidate the result cache when any extension file changes (#​6368)

Performance 🏎️

  • PHPStan always runs with OPCache (#​6324, #​6325)
  • Strip run-time type checks from PHPStan's own code with a turbo optimizer pass (phpstan/phpstan-src@​3788169)
  • Store the result cache in a framed serialize() format instead of a var_export'd PHP file (#​5982), thanks @​SanderMuller!
  • Edited PHP files from scanFiles and scanDirectories now properly invalidate files dependent on them in the result cache #​6352
    • Previously they invalidated the whole result cache and full analysis was necessary, this is no longer the case
  • Result cache now notices edited PHP files in Composer dependencies added via "repositories" with "type": "path" (#​6356)
    • Previously the result cache didn't notice this edit so it became stale and you had to run clear-result-cache to get fresh results
  • HashFunctionsReturnTypeExtension: init hash-algorithm list lazily (#​6345), thanks @​staabm!
  • Keep the result cache when the turbo extension is switched on or off (#​6335), thanks @​SanderMuller!
  • Track scanned files as file dependencies instead of invalidating the whole result cache (#​6352), #​15149
  • Do not invalidate the result cache when tmpDir changes (#​6359), thanks @​SanderMuller!

Function signature fixes 🤖

Internals 🔍

  • Cover constant fetch, enum case, static call, instanceof and typehints in checkImportedClassNameCase tests (#​6347), thanks @​janedbal!

2.2.12

Improvements 🔧

Bugfixes 🐛

  • Look up the stub PHPDoc of a class only when it is read (#​6316), #​15120
  • Export PHPDoc name scopes without resolving @​template bounds (#​6316)
  • Read property virtuality off the native reflection when exporting nodes (#​6316)
  • Keep the turbo code that runs before the Composer autoloader polyfill-free (#​6319), #​15137
  • End forked workers with _exit() instead of PHP's full teardown (#​6320), #​15138, #​15142

Performance 🏎️

2.2.11

Improvements 🔧

  • Add a result-cache-info command reporting how the next analyse would use the result cache (#​6312), #​15135

Bugfixes 🐛

2.2.10

This release brings improved performance and reduced memory consumption, mainly thanks to:

  • Forking parallel workers where available:
    • Instead of spawning processes with proc_open(), they are forked with pcntl_fork(), saving time to bootstrap PHPStan
    • This requires PHPStan Turbo extension (already present if you install PHPStan with Composer) and non-Windows OS
  • Deduped objects held in memory by BetterReflection
  • Turbo extension-accelerated directories symbols scanning which allowed us to remove caching of this data and locking in worker processes

Feel free to comment how PHPStan 2.2.9 vs. 2.2.10 perform on your project! 🚀

Bleeding edge 🔪

If you want to see the shape of things to come and adopt bleeding edge features early, you can include this config file in your project's phpstan.neon:

includes:
	- vendor/phpstan/phpstan/conf/bleedingEdge.neon

Of course, there are no backwards compatibility guarantees when you include this file. The behaviour and reported errors can change in minor versions with this file included. Learn more

Improvements 🔧

  • Notify in CI when a full analysis ran without a pre-existing result cache for more than 60 seconds (#​5954), #​14881, thanks @​staabm!
  • Emit node callbacks after the node's results are stored and drop FNSR introduced in 2.1.34 (#​6248)
  • Report peak memory per process instead of a summed total (#​6297)

Bugfixes 🐛

  • Return the operand from union() for equal array operands, not just identical ones (#​6257), thanks @​AJenbo!
  • Preserve surviving offsets when popping or shifting a list (#​6274)
  • Account for deduplicated trait errors per using-class context (#​6280), #​14932
  • Revert "Consult bootstrap-registered custom autoloaders only after the static source locators (#​6069)" (#​6292), #​15102
  • Run StubFilesExtensions only after bootstrapFiles have been executed (#​6284), #​15120

Performance 🏎️

Function signature fixes 🤖

Internals 🔍

2.2.9

Improvements 🔧

  • Store result cache paths relative to the install location (#​6190), #​8599

Bugfixes 🐛

Performance 🏎️

Function signature fixes 🤖

Internals 🔍

  • Accept the shared data provider's third argument in testOverridingFinalMethod (#​6193), thanks @​SanderMuller!
  • Fix incomplete version requirements in tests (#​6198), thanks @​staabm!
  • Removed duplicate code (#​6200), thanks @​staabm!
  • Carry the closure body walk's gathered statements on ProcessClosureResult (#​6169)
  • Restructure ClosureTypeResolver around single-walk closure type builders (#​6169)
  • Seed the closure type cache from the handler's single body walk (#​6169)
  • Seed the arrow function type cache from the handler's single body walk (#​6169)
  • Seed the closure type cache from the call-argument body walks (#​6169)
  • Walk closure by-ref convergence passes in deep statement context (#​6208)
  • Extract the statement-list loop into doProcessStmtNodes() (#​6215)
  • Replace TypeSpecifyingFunctionsDynamicReturnTypeExtension with direct code in FuncCallHandler (#​6221)
  • Refuse to commit a torn turbo binary set to the dist repository (#​6225)
  • Move repeated @​internal logic into RestrictedInternalUsageHelper (#​6230), thanks @​staabm!
  • Simplify FiniteTypeSet (#​6229), thanks @​staabm!
  • Extract the shared parameter-out type comparison into ParameterOutTypeCheck (#​6238), thanks @​SanderMuller!
rector/rector (Source: GitHub Releases))

2.6.6

File selection

--filter option to narrow processed files (#​8419)

New --filter option keeps only files whose path matches all given patterns. Repeat the option to require several patterns at once, handy for scoping a run to a subtree or a naming convention without editing config paths.

vendor/bin/rector process src --filter Controller --filter Admin

Before: process every file under the given paths. After: process only files matching all --filter patterns.

Bugfixes 🐛

  • Add back RectorConfig::tag() as a no-op BC layer (#​8431)
  • TypeDeclarationDocblocks: fix invalid array-in-key docblock when narrowing long array unions (#​8430)
  • BetterPhpDocParser: keep import used only in an annotation array key (#​8429)
  • RenameVariableToMatchMethodCallReturnTypeRector: fix partial rename with same-named nested arrow param (#​8428)
  • ArrayFirstLastRector: skip nested compound assignment (#​8425)
  • ReturnTypeFromStrictNewArrayRector: add doc return type only for list and generic arrays (#​8423), skip noisy array-shape union return docblock (#​8422)

Extension packages

rector-phpunit 🟢

  • AllowMockObjectsForDataProviderRector: skip dynamic method call (#​781)
  • AssertEmptyNullableObjectToAssertInstanceofRector: skip assertNull/assertEmpty (#​780)
  • AddSeeTestAnnotationRector: skip existing imported or short @​see annotation (#​779)

rector-downgrade-php ⬇️

  • DowngradeSetAccessibleReflectionPropertyRector: handle getProperties()/getMethods() loop (#​396)
  • DowngradeHashAlgorithmXxHashRector: skip PHP_VERSION_ID guarded hash() calls (#​394)

Internal / cleanup

  • Add mspirkov/yii2-rector link to README (#​8427)
  • Add fixtures for arrow functions returning a ?? expression (#​8421)

2.6.5

Caching

This release makes the cache smarter about config changes - fewer needless full re-runs, while still invalidating when results could actually differ.

Configured rule value changes now invalidate the cache (#​8400)

withConfiguredRule() stored its config on the RectorConfig instance only, never in the cache hash. Changing a rule's values - same class, different config - kept serving the stale result.

 return RectorConfig::configure()
     ->withConfiguredRule(SomeRector::class, [
-        'old value',
+        'new value',
     ]);

Before: cache kept, files re-analysed with stale value. After: cache dropped, re-analysed with new value. Merged config now flows through a RULE_CONFIGURATIONS parameter into the strict cache hash. Upgrading invalidates the cache once for projects using configured rules.

--only <Rule> reuses the full-run cache (#​8400)

Each --only selection has its own cache namespace, so a file left clean by a prior full run was re-analysed under --only even when nothing changed. A scoped run now falls back to the full-run cache (read only, file content still compared, so real edits are still picked up).

vendor/bin/rector process       # full run, files left clean are cached
vendor/bin/rector process --only "Rector\..\SomeRector"

Before: --only re-analyses every file. After: skips files the full run already left clean.

Directional cache invalidation on config change (#​8397)

Previously any change to any config parameter dropped the whole cache. Now changes are compared by direction:

  • removing a rule/set, or adding a skip -> strictly less work -> cache kept
  • adding a rule/set, or removing a skip -> more work possible -> cache dropped
  • output-affecting params (php version, import names, indent) -> any change still drops the cache
  • runtime/reporting params (--parallel, memory limit, deprecation notices) -> never invalidate
 return RectorConfig::configure()
     ->withRules([
         SomeRector::class,
-        OtherRector::class,     // removing a rule -> cache kept
     ]);
 return RectorConfig::configure()
     ->withSkip([
         SomeRector::class,
+        AnotherRector::class,   // adding a skip -> cache kept
     ]);

Before: full cache dropped, every file re-analysed. After: cache kept, only changed files re-analysed. A legacy cache value from an older version triggers a single safe reset.

Bugfixes 🐛

  • Support PHPStan 2.2.10 scope changes (#​8420)
  • Fix double backslash in FunctionFirstClassCallableRector (#​8398)
  • IfToNullCoalescingAssignRector: fix isset guard never converting (#​8389), keep comments above if (#​8388), skip non-nullable typed property (#​8387)
  • InlineIfToExplicitIfRector: skip same local method call and call chain (#​8417, #​8418)
  • ArrowFunctionDelegatingCallToFirstClassCallableRector: skip callee arity mismatch (#​8391)
  • Fix newline formatting of deprecated skipped rules warning (#​8386)

Deprecations 💀

Rules:

  • ShortenElseIfRector (#​8416)
  • CombineIfRector (#​8413)
  • ExplicitBoolCompareRector - can make if-train less readable (#​8412)
  • SimplifyIfElseToTernaryRector - avoids less readable code (#​8411)

Sets and config:

  • SetList::IF - rules moved into code-quality and coding-style sets (#​8414)
  • SetList::INSTANCEOF - rules moved into code-quality and type-declaration sets (#​8408)
  • SetList::PHP_* constants - use withPhpSets() / withPhpLevel() instead (#​8405)
  • Deprecate group approach for composer-based sets; load from Laravel and Drupal directly (#​8406)
  • Mark prepared sets params and withCacheMetaExtension() as @​deprecated (#​8415)
  • Disable withSetProviders() (#​8392)

Console commands:


Internal / cleanup

  • Inline symplify/easy-parallel into src/Parallel (#​8401)
  • Reuse RectorCheaperGuardsFirstRule from symplify/phpstan-rules (#​8404)
  • Remove SingleServiceRegistrationRule, drop unused react/promise (#​8403)
  • Remove unused RelatedConfigInterface, dead stub files (#​8395, #​8407)
  • Trim redundant Issues regression tests (#​8399)

2.6.4

A tooling release under the hood: Rector's dependency-injection container moves off illuminate/container onto entropy/entropy, and composer-based sets now target the lowest declared version of a library instead of guessing the current one.


New rules 🎉

rector-src

  • [Php7.4] IfToNullCoalescingAssignRector — convert an if null-guard into ??= (#​8356)
  • [Php7.3] ArrayKeysToArrayKeyFirstLastRectorarray_keys($a)[0]array_key_first($a) (#​8238)

rector-symfony

  • [Web Link] WebLinkStringRelationsToConstantsRector (#​1058)

Engine 🔧

  • Switch the DI container from illuminate/container to entropy/entropy (#​8362) — lighter container, order-independent service collections via autodiscover()
  • [VersionBonding] Allow a rule to require multiple composer package constraints at once (#​8355)
  • [Composer] Target the lowest declared version for libraries in composer-based sets; only a project package type is treated as an application (#​8359, #​8363)
  • [Configuration] Skip deprecated rules pulled in from an active set — warn only instead of crashing (#​8358)
  • [DI] Register PHPStan PhpVersionFactory as a public service so third-party rules can autowire it (#​8365)
  • [PhpParser] Merge decorating node visitors from 14 to 8 for faster traversal (#​8380)

Bugfixes 🐛

rector-src

  • [TypeDeclarationDocblocks] Skip ClassMethodArrayDocblockParamFromLocalCallsRector on methods overriding a parent/interface (#​8357)
  • [TypeDeclarationDocblocks] Skip a contradicting @​param array when the local call type conflicts with the default value (#​8381)
  • [Naming] Skip a valid singular name with an ous suffix in RenameForeachValueVariableToMatchExprVariableRector (#​8382)

rector-symfony

  • [Symfony 6.1] Skip CommandConfigureToAttributeRector on non-constant configure() values (#​1057)
  • [Symfony 3.4] Skip ContainerGetNameToTypeInTestsRector when the named service has no matching FQCN service (#​1051)
  • [Symfony 3.0] Skip OptionNameRector when no option name changes (#​1044)

rector-phpunit

  • [CodeQuality] Fix AddInstanceofAssertForNullableArgumentRector duplicating assertInstanceOf inside traits (#​773)
  • [CodeQuality] Fix MatchAssertSameExpectedTypeRector rewriting a passing assert into a failing one (#​771)

Set changes 📈

rector-src

  • [CodeQuality] Add FlipNegatedTernaryInstanceofRector to the code quality level (#​8385)

rector-symfony

  • [Symfony 7.3] Add missing rename function call (#​1056)
  • [Symfony 7.2] Add missing rename class and function calls (#​1055)
  • [CodeQuality] Move RequestIsMainRector and other version-bonded rules to the composer-based set (#​1048, #​1045)
  • [Symfony 7.3] GetFiltersAndFunctionsToAsTwigAttributeRector — support arrow-call functions; gate on symfony/twig-bridge 7.3, not twig alone (#​1043, #​1050)
  • [Set] Mark ANNOTATIONS_TO_ATTRIBUTES as @​internal instead of @​deprecated (#​1053)

rector-doctrine

  • Move AddAnnotationToRepositoryRector to the composer-based set only (#​510)

Deprecations 💀

Deprecated rules run without any effect, print a warning and will be removed in a future major release.

rector-symfony

  • [CodeQuality] InlineClassRoutePrefixRector (#​1049)
  • [CodeQuality] AddTraitGetterReturnTypeBasedOnSetterRequiredRector (#​1047)
  • [CodeQuality] LiteralGetToRequestClassConstantRector (#​1046)

Removals 💀

rector-src

  • [Cleanup] Remove the write-only CallLikeThisBoundClosureArgsNodeVisitor and its unread attribute (#​8373)

Task options

If you close the PR, the task will be skipped and Conductor will schedule the next task. Clicking the "Skip" button in the UI has the same effect. Conductor won't attempt to update the dependency to this exact version again but it will schedule updates to newer versions.


Powered by Private Packagist

@private-packagist

private-packagist Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

composer.lock

Dev Package changes

Package Operation From To About
friendsofphp/php-cs-fixer upgrade v3.95.20 v3.95.24 diff
phpstan/phpstan upgrade 2.2.8 2.2.13 diff
rector/rector upgrade 2.6.3 2.6.6 diff

Settings · Docs · Powered by Private Packagist

@github-actions
github-actions Bot force-pushed the conductor-multiple-vendors-all-87082 branch from 904df64 to 14e7dd3 Compare September 4, 2026 13:27
Conductor executed the following commands:
composer update friendsofphp/php-cs-fixer:v3.95.24 phpstan/phpstan:2.2.13 rector/rector:2.6.6 --with-all-dependencies --minimal-changes
@private-packagist
private-packagist Bot force-pushed the conductor-multiple-vendors-all-87082 branch from 14e7dd3 to 47c211a Compare September 4, 2026 13:27
@private-packagist

Copy link
Copy Markdown
Contributor Author

The composer.lock diff comment has been updated to reflect new changes in this PR.

@pscheit
pscheit merged commit dc55c32 into main Sep 7, 2026
1 check passed
@private-packagist
private-packagist Bot deleted the conductor-multiple-vendors-all-87082 branch September 7, 2026 12:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant