NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #743 most downloaded on Packagist
Drupal extension and rules for PHPStan
Last release 19 days ago
18 Sep 2026
Release timing varies
gaps range from 8 days to 4 months
Rarely documented
notes for 13 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
122 releases · first in 2019
Do not report inherited entity storage constructor parameters ( #1039 ) by @pfrenssen in #1055
Full Changelog: 2.2.1...2.2.2
One column per quarter.
Resolve every constant entity type ID in getStorage() return type by @mglaman in #1045
Full Changelog: 2.2.0...2.2.1
Remove dead code and fix exception messages in legacy rules by @mglaman in #1042
Full Changelog: 2.1.2...2.2.0
Ignore environment-dependent instanceof.alwaysTrue in getChildren() by @mglaman in #1033
Full Changelog: 2.0.18...2.1.2
Add PathItem field type stub by @oiahoon in #1007
Full Changelog: 2.1.0...2.1.1
phpstan-drupal 2.1.0 graduates a set of opt-in rules and bleeding-edge behavior to the defaults. Expect new reported errors after upgrading — each cha
phpstan-drupal 2.1.0 graduates a set of opt-in rules and bleeding-edge behavior to the defaults. Expect new reported errors after upgrading — each change below includes the configuration to restore the old behavior.
testClassSuffixNameRule, dependencySerializationTraitPropertyRule, accessResultConditionRule, cacheableDependencyRule, hookFormAlterRule, loggerFromFactoryPropertyAssignmentRule, entityStorageDirectInjectionRule, symfonyYamlParseRule, and entityOperationsCacheabilityRule no longer require opt-in. Disable any of them individually:
parameters:
drupal:
rules:
cacheableDependencyRule: falseSee the README for what each rule reports.
hookRules renamed to hookFormAlterRuleIf your configuration referenced hookRules, rename the key. The old name is no longer recognized.
ContainerInterface::has() returns bool for known servicescontainerHasAlwaysTrue now defaults to false, so conditional service guards are no longer reported as always-true. This graduated from bleedingEdge.neon. Restore the old inference:
parameters:
drupal:
bleedingEdge:
containerHasAlwaysTrue: trueloadInclude() checks now apply to concrete ModuleHandler receiversAn inverted type check made the LoadIncludes rule silently skip receivers typed as the concrete ModuleHandler class and fire on plain object/mixed receivers. Both directions are fixed, which may surface new loadIncludes.* errors in code that was previously skipped. Thanks @donquixote!
getInstanceFromDefinition() narrows to the passed class name, but the container can substitute a different class at runtime. Set classResolverReturnType: false to fall back to the declared object return type and keep instanceof assertions meaningful:
parameters:
drupal:
classResolverReturnType: falseThe webflo/drupal-finder constraint is now ^1.3.1 || ^2.0, so projects pick up drupal-finder 2.0 as soon as it releases. Nothing changes today — 1.3.1 remains the latest published version.
Full Changelog: 2.0.17...2.1.0
Add PathItem field type stub by @oiahoon in #1007
Full Changelog: 2.1.0...2.0.18
Config::get return type extension by @mstrelan in #993
Full Changelog: 2.0.16...2.0.17
Fix false positive when deprecation helper is inside functioncall by @bbrala in #989
Full Changelog: 2.0.15...2.0.16
Fix wrongly deprecated method RevisionableStorageInterface::loadRevision by @TheFakeCake in #980
2.1.0 is coming soon, which will enable some rules that are currently disabled by default. The rules can still be turned off. If you're worried about disruptions, change your Composer constraint to ~2.0.14 to avoid minor version bumps.
Full Changelog: 2.0.14...2.0.15
2.1.0 is coming soon , which will enable some rules that are currently disabled by default. The rules can still be turned off. If you're worried about
2.1.0 is coming soon, which will enable some rules that are currently disabled by default. The rules can still be turned off. If you're worried about disruptions, change your Composer constraint to ~2.0.14 to avoid minor version bumps.
Full Changelog: 2.0.13...2.0.14
Avoid marking scope deprecated if #[IgnoreDeprecations] has arguments by @mondrake in #926
Full Changelog: 2.0.12...2.0.13
Make FieldItemListPropertyReflection entity property nullable by @Niklan in #950
Full Changelog: 2.0.11...2.0.12
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
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 →