NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #906 most downloaded on Packagist
Set of Symplify rules, type extensions and error formatter for PHPStan
Last release 13 days ago
24 Sep 2026
Release timing varies
gaps range from 9 days to 5 months
Some releases are documented
notes for 19 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
474 releases · first in 2020
One column per quarter.
Nothing published for this version
Nothing published for this version
[symfony] Handle brace-glob string exclude('../{A,B}') in AlreadyRegisteredAutodiscoveryServiceRule - fixes false positives on services excluded via a
exclude('../{A,B}') in AlreadyRegisteredAutodiscoveryServiceRule - fixes false positives on services excluded via a single glob string (#300)NoGetRepositoryOutsideServiceRule: guard empty args on getRepository() (#298)RequireInvokableControllerRule, low value (#299)Patch release, all refinements to existing rules plus one rule removal.
Patch release, all refinements to existing rules plus one rule removal.
Type suffix (#297)A form type class may now end in either Type or FormType. Previously only FormType was accepted, which clashed with the common Symfony SomethingType convention.
A single-parameter attribute no longer needs a named argument. With one param the positional value is unambiguous, so the name adds nothing.
// now allowed
#[Route('/home')]self/static (#294)A setter returning self or static is a deliberate fluent interface, not the accidental return the rule targets, so it is left alone.
Removed - low value in practice.
Fixes a PHPStan internal error in NoReferenceRule on classes whose ancestor exposes a magic method matching the analysed method name (e.g. Doctrine fi
Fixes a PHPStan internal error in NoReferenceRule on classes whose ancestor exposes a magic method matching the analysed method name (e.g. Doctrine findBy* finders on ObjectRepository). See #293.
Nothing published for this version
NoNullableServiceInConstructorRule — skip data-holder namespaces
Patch release.
The rule no longer flags nullable constructor params in classes that are plainly data holders, not services. A class whose namespace contains \Entity\, \Event\, \DTO\, \Message\, \DAO\, \Token\, \Exception\, \Helper\, \ValueObject\, \Form\Type\ or \Badge\ is skipped whole — their constructors carry nullable values (events, DTOs, tokens, exceptions, helpers, form types, security badges), not container services.
The existing skips stay: abstract classes, Throwable/DateTimeInterface values, a same-typed non-nullable sibling param, and anonymous classes.
No consumer-side ignoreErrors needed for those namespaces anymore.
Nothing published for this version
Only flag a cheap guard for hoisting when the expensive-call anchor merely captures the value (assignment) or bails on it (pure bail guard). An anchor
Only flag a cheap guard for hoisting when the expensive-call anchor merely
captures the value (assignment) or bails on it (pure bail guard). An anchor with
its own side effects - an attribute-writing block, or a bare call statement that
mutates a variable by-reference inside a closure - is unsafe to hoist past, since
the nodes the guard bails out on would lose that side effect. Fixes false
positives on DowngradeSubstrFalsyRector and TypeWillReturnCallableArrowFunctionRector.
Claude-Session: https://claude.ai/code/session_01Na4eYvNqa2pdhZrBXbegrv
Ported from rector-src: flags a cheap early-return guard (isName, count, in_array) placed after an expensive analysis call (getType, isObjectType, ...
Ported from rector-src: flags a cheap early-return guard (isName, count, in_array)
placed after an expensive analysis call (getType, isObjectType, ...) inside a Rector
rule, where the cheap guard could bail out first and skip the costly analysis.
Claude-Session: https://claude.ai/code/session_01Na4eYvNqa2pdhZrBXbegrv
[Rector] Skip refactor() delegating REMOVE_NODE to helper methods
[Rector] Skip refactor() delegating REMOVE_NODE to helper methods (#279)
Skip refactor() delegating REMOVE_NODE to helper methods in NoIntegerRefactorReturnRule
Skip refactor() delegating REMOVE_NODE to helper methods in NoIntegerRefactorReturnRule (#279)
NoMissnamedDocTagRule — no longer flags a constant whose docblock merely mentions @return / @param inside prose. The constant check now requires the t
NoMissnamedDocTagRule — no longer flags a constant whose docblock merely mentions @return/@param inside prose. The constant check now requires the tag at the start of a docblock line (* @tag), matching the existing method/property checks. Real misnamed tags are still reported.// now skipped — @return is part of the sentence, not a tag
/**
* Using 10-level array @return docblocks makes code very hard to read,
* lets limit it to reasonable level
*/
private const int MAX_NESTING = 3;
// still reported
/**
* @return string
*/
private const NAME = 'value';Full changelog: 14.12.1...14.12.2
PhpUpgradeDowngradeRegisteredInSetRule — skip rules implementing Rector\Configuration\Deprecation\Contract\DeprecatedInterface . Deprecated rules are…
PhpUpgradeDowngradeRegisteredInSetRule — skip rules implementing Rector\Configuration\Deprecation\Contract\DeprecatedInterface. Deprecated rules are not registered in config sets, so they no longer trigger the "Register ... to phpXX.php config set" error.
NoIntegerRefactorReturnRule — also inspect a bare int refactor() return type (previously only Node|int union types were checked). NodeVisitor::REMOVE_NODE stays allowed.
// now reported — was silently skipped before
public function refactor(Node $node): int
{
return NodeVisitor::DONT_TRAVERSE_CHILDREN;
}
// allowed
public function refactor(Node $node): int
{
return NodeVisitor::REMOVE_NODE;
}Full changelog: 14.12.0...14.12.1
Config parameters are now nested under the symplify vendor key , following convention. Update your phpstan.neon accordingly:
symplify vendor key, following convention. Update your phpstan.neon accordingly: parameters:
- symfonyReturnType: true
- laravelReturnType: true
- pathStrings: true
+ symplify:
+ symfonyReturnType: true
+ laravelReturnType: true
+ pathStrings: truemaximumIgnoredErrorCount feature has been removed. Drop it from your config: parameters:
- maximumIgnoredErrorCount: 12Nothing published for this version
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
release PHP 7.4 downgraded
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →