vimeo/psalm
### [`v5.1.0`](https://togithub.com/vimeo/psalm/releases/tag/5.1.0)
[Compare Source](https://togithub.com/vimeo/psalm/compare/5.0.0...5.1.0)
#### What's Changed
##### Deprecations
- Defer cache directory creation until it's needed by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8789](https://togithub.com/vimeo/psalm/pull/8789)
##### Features
- check "never" return type more strictly by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8624](https://togithub.com/vimeo/psalm/pull/8624)
- Report by issues grouped by level and type by [@bdsl](https://togithub.com/bdsl) in [https://github.com/vimeo/psalm/pull/8774](https://togithub.com/vimeo/psalm/pull/8774)
##### Fixes
- Ignore non-existing classes during initial scan of intersection types by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8794](https://togithub.com/vimeo/psalm/pull/8794)
- handle true/false reconciliation consistently, fix [#8795](https://togithub.com/vimeo/psalm/issues/8795) by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8796](https://togithub.com/vimeo/psalm/pull/8796)
- fix sealed combination by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8798](https://togithub.com/vimeo/psalm/pull/8798)
- Fix [#8806](https://togithub.com/vimeo/psalm/issues/8806) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8809](https://togithub.com/vimeo/psalm/pull/8809)
##### Docs
- Update installation.md - `5` requires PHP >= 7.4 by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/8805](https://togithub.com/vimeo/psalm/pull/8805)
- Adds documentation for the `forbiddenFunctions` config option by [@p810](https://togithub.com/p810) in [https://github.com/vimeo/psalm/pull/8808](https://togithub.com/vimeo/psalm/pull/8808)
#### New Contributors
- [@p810](https://togithub.com/p810) made their first contribution in [https://github.com/vimeo/psalm/pull/8808](https://togithub.com/vimeo/psalm/pull/8808)
**Full Changelog**: https://github.com/vimeo/psalm/compare/5.0.0...5.1.0
### [`v5.0.0`](https://togithub.com/vimeo/psalm/releases/tag/5.0.0): Psalm 5
[Compare Source](https://togithub.com/vimeo/psalm/compare/4.30.0...5.0.0)
Welcome to Psalm 5!
There's an accompanying post on psalm.dev, written by [@muglug](https://togithub.com/muglug) & the current maintainers of Psalm.
- [read in English](https://psalm.dev/articles/psalm-5)
- [read in Ukrainian](https://psalm.dev/articles/psalm-5-uk) (translated by [@weirdan](https://togithub.com/weirdan))
- [read in French](https://psalm.dev/articles/psalm-5-fr) (translated by [@orklah](https://togithub.com/orklah))
- [read in Italian](https://psalm.dev/articles/psalm-5-it) (translated by [@danog](https://togithub.com/danog))
#### What's Changed
##### Removed
- Php version consistency by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6898](https://togithub.com/vimeo/psalm/pull/6898)
- Removed TEmpty by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6662](https://togithub.com/vimeo/psalm/pull/6662)
- remove support for allowPhpstormGenerics by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6705](https://togithub.com/vimeo/psalm/pull/6705)
- remove exitFunctions for Psalm5 by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6808](https://togithub.com/vimeo/psalm/pull/6808)
- Drop legacy procedural files by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7270](https://togithub.com/vimeo/psalm/pull/7270)
- Dropped removed config entries by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7272](https://togithub.com/vimeo/psalm/pull/7272)
- Dropped legacy plugin API by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7275](https://togithub.com/vimeo/psalm/pull/7275)
- Dropped deprecated `CodeIssue` methods by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7276](https://togithub.com/vimeo/psalm/pull/7276)
- Dropped deprecated `DocComment` methods by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7278](https://togithub.com/vimeo/psalm/pull/7278)
- Dropped `THtmlEscapedString` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7285](https://togithub.com/vimeo/psalm/pull/7285)
- Drop orphaned token by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7290](https://togithub.com/vimeo/psalm/pull/7290)
- Bump PHP version to 7.4 by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7291](https://togithub.com/vimeo/psalm/pull/7291)
- Remove forbidEcho by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7420](https://togithub.com/vimeo/psalm/pull/7420)
- remove TPositiveInt by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7473](https://togithub.com/vimeo/psalm/pull/7473)
- Lock event classes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7491](https://togithub.com/vimeo/psalm/pull/7491)
- \[TASK] Add AfterFunctionLikeAnalysisEvent::getFunctionlikeStorage by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7526](https://togithub.com/vimeo/psalm/pull/7526)
- Finalize (and internalize) more classes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7578](https://togithub.com/vimeo/psalm/pull/7578)
- Finalize issues by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7595](https://togithub.com/vimeo/psalm/pull/7595)
- Finalize storages by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7597](https://togithub.com/vimeo/psalm/pull/7597)
- Finalize virtual nodes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7598](https://togithub.com/vimeo/psalm/pull/7598)
- Finalize types nodes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7623](https://togithub.com/vimeo/psalm/pull/7623)
- remove totallyTyped by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7651](https://togithub.com/vimeo/psalm/pull/7651)
##### Features
- Support PHPStan notation for empty-arrays by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7312](https://togithub.com/vimeo/psalm/pull/7312)
- Try to provide literal int types when possible (fixes [#6966](https://togithub.com/vimeo/psalm/issues/6966)) by [@ricardoboss](https://togithub.com/ricardoboss) in [https://github.com/vimeo/psalm/pull/7071](https://togithub.com/vimeo/psalm/pull/7071)
- Allow config to define thread count by [@M1ke](https://togithub.com/M1ke) in [https://github.com/vimeo/psalm/pull/7442](https://togithub.com/vimeo/psalm/pull/7442)
- Contextual type inference for high order function arg by [@klimick](https://togithub.com/klimick) in [https://github.com/vimeo/psalm/pull/7417](https://togithub.com/vimeo/psalm/pull/7417)
- feat: Handle native intersection types by [@petewalker](https://togithub.com/petewalker) in [https://github.com/vimeo/psalm/pull/7454](https://togithub.com/vimeo/psalm/pull/7454)
- improve support for enum_exists by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7404](https://togithub.com/vimeo/psalm/pull/7404)
- Support type annotations for class consts (fixes [#942](https://togithub.com/vimeo/psalm/issues/942)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7123](https://togithub.com/vimeo/psalm/pull/7123)
- Improve class constant static analysis by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7154](https://togithub.com/vimeo/psalm/pull/7154)
- Add support for references and improve UnusedVariable checks (fixes [#7254](https://togithub.com/vimeo/psalm/issues/7254)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7339](https://togithub.com/vimeo/psalm/pull/7339)
- InternalTaintSinkMap: Add `getimagesize` as SSRF sink by [@mal-tee](https://togithub.com/mal-tee) in [https://github.com/vimeo/psalm/pull/7504](https://togithub.com/vimeo/psalm/pull/7504)
- Enable extensions based on composer.json instead of those loaded at runtime (fixes [#5482](https://togithub.com/vimeo/psalm/issues/5482)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7107](https://togithub.com/vimeo/psalm/pull/7107)
- Dynamic function storage provider by [@klimick](https://togithub.com/klimick) in [https://github.com/vimeo/psalm/pull/7471](https://togithub.com/vimeo/psalm/pull/7471)
- ❗Allow plugins to modify Config::$fileExtensions early by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/6789](https://togithub.com/vimeo/psalm/pull/6789)
- \[FEATURE] Introduce BeforeStatementAnalysisEvent by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7535](https://togithub.com/vimeo/psalm/pull/7535)
- \[FEATURE] Allow to intercept adding issue in IssueBuffer by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7530](https://togithub.com/vimeo/psalm/pull/7530)
- Ensure all template parameters are specified in all extended|used classlikes by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/7492](https://togithub.com/vimeo/psalm/pull/7492)
- feat: make key-of/value-of usable with non-const arrays by [@Patrick-Remy](https://togithub.com/Patrick-Remy) in [https://github.com/vimeo/psalm/pull/7396](https://togithub.com/vimeo/psalm/pull/7396)
- More class const improvements. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7666](https://togithub.com/vimeo/psalm/pull/7666)
- Add `@psalm-check-type` and `@psalm-check-type-exact`. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7686](https://togithub.com/vimeo/psalm/pull/7686)
- feat(types): add properties-of type by [@Patrick-Remy](https://togithub.com/Patrick-Remy) in [https://github.com/vimeo/psalm/pull/7359](https://togithub.com/vimeo/psalm/pull/7359)
- Invert meaning of dupe_key by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/7475](https://togithub.com/vimeo/psalm/pull/7475)
- Feature: allow non-union assertion types by [@boesing](https://togithub.com/boesing) in [https://github.com/vimeo/psalm/pull/8077](https://togithub.com/vimeo/psalm/pull/8077)
- Allow `value-of` to work with backed enums (fixes [#7874](https://togithub.com/vimeo/psalm/issues/7874)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8283](https://togithub.com/vimeo/psalm/pull/8283)
- Add capability to use inclusion files in a different directory (fix) by [@gmessier](https://togithub.com/gmessier) in [https://github.com/vimeo/psalm/pull/8402](https://togithub.com/vimeo/psalm/pull/8402)
- Add dirname return type provider by [@mcaskill](https://togithub.com/mcaskill) in [https://github.com/vimeo/psalm/pull/8611](https://togithub.com/vimeo/psalm/pull/8611)
- Add stubs for ext-ffi by [@LeSuisse](https://togithub.com/LeSuisse) in [https://github.com/vimeo/psalm/pull/8614](https://togithub.com/vimeo/psalm/pull/8614)
- add basename return type provider by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8620](https://togithub.com/vimeo/psalm/pull/8620)
- Add stubs for ext-random (PHP 8.2) by [@lptn](https://togithub.com/lptn) in [https://github.com/vimeo/psalm/pull/8649](https://togithub.com/vimeo/psalm/pull/8649)
- Add support for strict arrays, fix type alias intersection, fix array_is_list assertion on non-lists by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8395](https://togithub.com/vimeo/psalm/pull/8395)
- Add support for phpstan-param-out by [@VincentLanglet](https://togithub.com/VincentLanglet) in [https://github.com/vimeo/psalm/pull/8678](https://togithub.com/vimeo/psalm/pull/8678)
- add --no-progress to psalter by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8709](https://togithub.com/vimeo/psalm/pull/8709)
- Allow `new` on objects by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8723](https://togithub.com/vimeo/psalm/pull/8723)
##### Fixes
- Use InvalidScalarArgument only when we can be sure PHP attempts coercion by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7188](https://togithub.com/vimeo/psalm/pull/7188)
- Trim baseline selection by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7279](https://togithub.com/vimeo/psalm/pull/7279)
- Prevent NoValue when there is no phpdoc by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7399](https://togithub.com/vimeo/psalm/pull/7399)
- create a return type provider for mb_internal_encoding by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7437](https://togithub.com/vimeo/psalm/pull/7437)
- Array key exists assert both ways by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7449](https://togithub.com/vimeo/psalm/pull/7449)
- \[TypeProvider] Provide argument types during FunctionParamsProviderEvent by [@veewee](https://togithub.com/veewee) in [https://github.com/vimeo/psalm/pull/7394](https://togithub.com/vimeo/psalm/pull/7394)
- Fix stub parent class not loaded. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7110](https://togithub.com/vimeo/psalm/pull/7110)
- fix code where the offset was wrong by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7463](https://togithub.com/vimeo/psalm/pull/7463)
- reconcile two arrays by intersecting them by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7470](https://togithub.com/vimeo/psalm/pull/7470)
- fix error with 0 being considered positive by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7487](https://togithub.com/vimeo/psalm/pull/7487)
- Fix crash due to unresolvable constant. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7490](https://togithub.com/vimeo/psalm/pull/7490)
- Fix failing case for const analyzer. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7503](https://togithub.com/vimeo/psalm/pull/7503)
- Fix side effect when loading config by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7506](https://togithub.com/vimeo/psalm/pull/7506)
- improve literal inequality with ranges and rework GreaterThan/LessThan assertions by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7511](https://togithub.com/vimeo/psalm/pull/7511)
- Remove mic-drop hack from if analysis by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7484](https://togithub.com/vimeo/psalm/pull/7484)
- fix some iterator stubs by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6970](https://togithub.com/vimeo/psalm/pull/6970)
- Fix empty array by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7517](https://togithub.com/vimeo/psalm/pull/7517)
- add back empty keyword by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7533](https://togithub.com/vimeo/psalm/pull/7533)
- Fix crash when assigning reference to unknown array offset by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7583](https://togithub.com/vimeo/psalm/pull/7583)
- Fix [#6683](https://togithub.com/vimeo/psalm/issues/6683) by improving simplification of CNF by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7631](https://togithub.com/vimeo/psalm/pull/7631)
- Enum collapsing by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7655](https://togithub.com/vimeo/psalm/pull/7655)
- Enum assertions by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7662](https://togithub.com/vimeo/psalm/pull/7662)
- Consistency for empty reconciliations by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7663](https://togithub.com/vimeo/psalm/pull/7663)
- fix count with match on arrays by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7665](https://togithub.com/vimeo/psalm/pull/7665)
- Prevent unnecessary filter_var() warnings on primitive types by [@mmcev106](https://togithub.com/mmcev106) in [https://github.com/vimeo/psalm/pull/7677](https://togithub.com/vimeo/psalm/pull/7677)
- Improve bool to int casting. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7696](https://togithub.com/vimeo/psalm/pull/7696)
- Fix issues with int range unpacking and with min/max by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7699](https://togithub.com/vimeo/psalm/pull/7699)
- Fix some minor issues with references. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7684](https://togithub.com/vimeo/psalm/pull/7684)
- restore callable-string Id by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7787](https://togithub.com/vimeo/psalm/pull/7787)
- fix refining lowercase string and non-empty-string together by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7844](https://togithub.com/vimeo/psalm/pull/7844)
- Remove `@psalm-generator-return` annotation by [@jrmajor](https://togithub.com/jrmajor) in [https://github.com/vimeo/psalm/pull/7853](https://togithub.com/vimeo/psalm/pull/7853)
- Resolve [#7855](https://togithub.com/vimeo/psalm/issues/7855) remove false from return type, in php8.0 and further ve… by [@dkemper](https://togithub.com/dkemper) in [https://github.com/vimeo/psalm/pull/7859](https://togithub.com/vimeo/psalm/pull/7859)
- Fix class const issue when using floats declared in future consts (fixes [#7973](https://togithub.com/vimeo/psalm/issues/7973)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7992](https://togithub.com/vimeo/psalm/pull/7992)
- Improve handling of unsupported references (fixes [#8018](https://togithub.com/vimeo/psalm/issues/8018)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8022](https://togithub.com/vimeo/psalm/pull/8022)
- Bring back disableVarParsing option by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8058](https://togithub.com/vimeo/psalm/pull/8058)
- Skip native classlike aliases by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8080](https://togithub.com/vimeo/psalm/pull/8080)
- Fix nasty parameter storage corruption bug by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8098](https://togithub.com/vimeo/psalm/pull/8098)
- Change return type of createFromInterface() on DateTime and DateTimeImmutable to static by [@bitwise-operators](https://togithub.com/bitwise-operators) in [https://github.com/vimeo/psalm/pull/8102](https://togithub.com/vimeo/psalm/pull/8102)
- Update DOM stub and add separate SimpleXML stub by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8140](https://togithub.com/vimeo/psalm/pull/8140)
- Track taints in static properties by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8150](https://togithub.com/vimeo/psalm/pull/8150)
- Fix type reconciliation breaking Context::$references_in_scope (fixes [#8289](https://togithub.com/vimeo/psalm/issues/8289)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8306](https://togithub.com/vimeo/psalm/pull/8306)
- Update `CachingIterator::getCache` stub. by [@drupol](https://togithub.com/drupol) in [https://github.com/vimeo/psalm/pull/8282](https://togithub.com/vimeo/psalm/pull/8282)
- Fix various array spread issues. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8044](https://togithub.com/vimeo/psalm/pull/8044)
- Fix union assertions by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8324](https://togithub.com/vimeo/psalm/pull/8324)
- Add BitwiseNot and BooleanNot operators to SimpleTypeInferer by [@bitwise-operators](https://togithub.com/bitwise-operators) in [https://github.com/vimeo/psalm/pull/8360](https://togithub.com/vimeo/psalm/pull/8360)
- fix: Fix template resolution of complex extended types by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8418](https://togithub.com/vimeo/psalm/pull/8418)
- Fix mixed type hole when sending Foo to Foo by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8481](https://togithub.com/vimeo/psalm/pull/8481)
- Fix type widening when `Any` assertion is used by [@pvandommelen](https://togithub.com/pvandommelen) in [https://github.com/vimeo/psalm/pull/8494](https://togithub.com/vimeo/psalm/pull/8494)
- Fix callmap for DOMNode methods by [@tvdijen](https://togithub.com/tvdijen) in [https://github.com/vimeo/psalm/pull/8566](https://togithub.com/vimeo/psalm/pull/8566)
- Fix [#8562](https://togithub.com/vimeo/psalm/issues/8562) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8571](https://togithub.com/vimeo/psalm/pull/8571)
- Fix [#8569](https://togithub.com/vimeo/psalm/issues/8569) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8570](https://togithub.com/vimeo/psalm/pull/8570)
- Fix [#6983](https://togithub.com/vimeo/psalm/issues/6983) [#8564](https://togithub.com/vimeo/psalm/issues/8564) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8578](https://togithub.com/vimeo/psalm/pull/8578)
- Fix template param for SplDoublyLinkedList by [@ADmad](https://togithub.com/ADmad) in [https://github.com/vimeo/psalm/pull/8579](https://togithub.com/vimeo/psalm/pull/8579)
- Fix [#8560](https://togithub.com/vimeo/psalm/issues/8560) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8586](https://togithub.com/vimeo/psalm/pull/8586)
- keep literal string for simple str_replace by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8619](https://togithub.com/vimeo/psalm/pull/8619)
- Mark hash_update functions as impure by [@aboks](https://togithub.com/aboks) in [https://github.com/vimeo/psalm/pull/8658](https://togithub.com/vimeo/psalm/pull/8658)
- Fix [#8664](https://togithub.com/vimeo/psalm/issues/8664) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8665](https://togithub.com/vimeo/psalm/pull/8665)
- Fix [#8669](https://togithub.com/vimeo/psalm/issues/8669) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8670](https://togithub.com/vimeo/psalm/pull/8670)
- Fix return type of ReflectionExtension::getVersion by [@come-nc](https://togithub.com/come-nc) in [https://github.com/vimeo/psalm/pull/8655](https://togithub.com/vimeo/psalm/pull/8655)
- Making `json_encode()` always produce a `non-empty-string`, when successful by [@Ocramius](https://togithub.com/Ocramius) in [https://github.com/vimeo/psalm/pull/8681](https://togithub.com/vimeo/psalm/pull/8681)
- Emit `DeprecatedInterface` when interface is referenced in a generic by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8687](https://togithub.com/vimeo/psalm/pull/8687)
- Prevent array{a: Foo} going cleanly into array by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8691](https://togithub.com/vimeo/psalm/pull/8691)
- Allow enum cases to reference constants by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8694](https://togithub.com/vimeo/psalm/pull/8694)
- Mark inferred mutation-free constructor as such by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8692](https://togithub.com/vimeo/psalm/pull/8692)
- Make `stringable-object` equivalent to `Stringable` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8688](https://togithub.com/vimeo/psalm/pull/8688)
- Flag invalid enum case value types by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8693](https://togithub.com/vimeo/psalm/pull/8693)
- Add extra types to Memcache::getExtendedStats and Memcached::getStats by [@bram123](https://togithub.com/bram123) in [https://github.com/vimeo/psalm/pull/8700](https://togithub.com/vimeo/psalm/pull/8700)
- Make array shapes strict by default by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8701](https://togithub.com/vimeo/psalm/pull/8701)
- Add support for type aliases in [@psalm-assert](https://togithub.com/psalm-assert)(-\*) annotations by [@annervisser](https://togithub.com/annervisser) in [https://github.com/vimeo/psalm/pull/8705](https://togithub.com/vimeo/psalm/pull/8705)
- Fix DateTimeZone::listAbbreviations return type by [@franmomu](https://togithub.com/franmomu) in [https://github.com/vimeo/psalm/pull/8717](https://togithub.com/vimeo/psalm/pull/8717)
- Reject `@psalm-consistent-constructor` in function docblocks by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8713](https://togithub.com/vimeo/psalm/pull/8713)
- Allow using imported types in other types within the same file by [@annervisser](https://togithub.com/annervisser) in [https://github.com/vimeo/psalm/pull/8708](https://togithub.com/vimeo/psalm/pull/8708)
- Argument 1 of curl_unescape by [@kamil-tekiela](https://togithub.com/kamil-tekiela) in [https://github.com/vimeo/psalm/pull/8730](https://togithub.com/vimeo/psalm/pull/8730)
- Allow parameter types to be contained by a class template type by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8731](https://togithub.com/vimeo/psalm/pull/8731)
- Fix dictionary for strip_tags by [@lptn](https://togithub.com/lptn) in [https://github.com/vimeo/psalm/pull/8729](https://togithub.com/vimeo/psalm/pull/8729)
- Fix [#8735](https://togithub.com/vimeo/psalm/issues/8735): IntlDateFormatter CallMaps. by [@niconoe-](https://togithub.com/niconoe-) in [https://github.com/vimeo/psalm/pull/8739](https://togithub.com/vimeo/psalm/pull/8739)
- Fix [#8748](https://togithub.com/vimeo/psalm/issues/8748) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8749](https://togithub.com/vimeo/psalm/pull/8749)
- Fix [#8745](https://togithub.com/vimeo/psalm/issues/8745) by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8753](https://togithub.com/vimeo/psalm/pull/8753)
- Simplify assertions generated by an array_key_exists check by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8763](https://togithub.com/vimeo/psalm/pull/8763)
- Suppress errors when validation regexps by [@Chi-teck](https://togithub.com/Chi-teck) in [https://github.com/vimeo/psalm/pull/8766](https://togithub.com/vimeo/psalm/pull/8766)
- Upgrade `humbug/box` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8770](https://togithub.com/vimeo/psalm/pull/8770)
- Replace all references to static variables when moving class by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8780](https://togithub.com/vimeo/psalm/pull/8780)
- Variables should outlive namespaces by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8779](https://togithub.com/vimeo/psalm/pull/8779)
- Check runtime requirements by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8782](https://togithub.com/vimeo/psalm/pull/8782)
- Fix crashes when XML report is used on PHP 8.1 by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8788](https://togithub.com/vimeo/psalm/pull/8788)
##### Docs
- Dropped `html-escaped-string` docs by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7281](https://togithub.com/vimeo/psalm/pull/7281)
- Document BC breaks in [#7358](https://togithub.com/vimeo/psalm/issues/7358) by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7360](https://togithub.com/vimeo/psalm/pull/7360)
- Added documentation for baseline files by [@ricardoboss](https://togithub.com/ricardoboss) in [https://github.com/vimeo/psalm/pull/7429](https://togithub.com/vimeo/psalm/pull/7429)
- Fix documentation for config. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7564](https://togithub.com/vimeo/psalm/pull/7564)
- Fix bullet indentation in documentation by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7565](https://togithub.com/vimeo/psalm/pull/7565)
- doc about property initialization by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7593](https://togithub.com/vimeo/psalm/pull/7593)
- Fix issue documentation links. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7687](https://togithub.com/vimeo/psalm/pull/7687)
- Improve documentation for InvalidGlobal to explain that it's sometimes valid by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7693](https://togithub.com/vimeo/psalm/pull/7693)
- Fix int-mask-of doc example by [@Seldaek](https://togithub.com/Seldaek) in [https://github.com/vimeo/psalm/pull/7812](https://togithub.com/vimeo/psalm/pull/7812)
- Documented the allowMissingFiles attribute for ignoreFiles by [@mmcev106](https://togithub.com/mmcev106) in [https://github.com/vimeo/psalm/pull/7867](https://togithub.com/vimeo/psalm/pull/7867)
- Fix a typo in MissingConstructor.md by [@MidnightDesign](https://togithub.com/MidnightDesign) in [https://github.com/vimeo/psalm/pull/8023](https://togithub.com/vimeo/psalm/pull/8023)
- PossiblyNullArgument: Adding common problem cases and possible solutions by [@ThomasLandauer](https://togithub.com/ThomasLandauer) in [https://github.com/vimeo/psalm/pull/8135](https://togithub.com/vimeo/psalm/pull/8135)
- Adding note about referencedMethod by [@ThomasLandauer](https://togithub.com/ThomasLandauer) in [https://github.com/vimeo/psalm/pull/8408](https://togithub.com/vimeo/psalm/pull/8408)
- Docs: Fix minor php syntax issues in code examples by [@pchapl](https://togithub.com/pchapl) in [https://github.com/vimeo/psalm/pull/8601](https://togithub.com/vimeo/psalm/pull/8601)
- Update PossiblyFalseReference.md by [@webmaster777](https://togithub.com/webmaster777) in [https://github.com/vimeo/psalm/pull/8622](https://togithub.com/vimeo/psalm/pull/8622)
- Last-minute docufix by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8685](https://togithub.com/vimeo/psalm/pull/8685)
- Fixing code formatting by [@ThomasLandauer](https://togithub.com/ThomasLandauer) in [https://github.com/vimeo/psalm/pull/8696](https://togithub.com/vimeo/psalm/pull/8696)
- Fix formatting by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8689](https://togithub.com/vimeo/psalm/pull/8689)
- Removing list by [@ThomasLandauer](https://togithub.com/ThomasLandauer) in [https://github.com/vimeo/psalm/pull/8698](https://togithub.com/vimeo/psalm/pull/8698)
- improve docs and phrasing about NoValue by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8754](https://togithub.com/vimeo/psalm/pull/8754)
##### Internal changes
- Disable PSL (not yet compatible with Psalm 5) by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7269](https://togithub.com/vimeo/psalm/pull/7269)
- Require `@internal` annotation on `Psalm\Internal` symbols by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7268](https://togithub.com/vimeo/psalm/pull/7268)
- Dropped deprecated `TypeAnalyzer` methods by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7277](https://togithub.com/vimeo/psalm/pull/7277)
- Moved `getPsalmHelpText()` to `Cli\Psalm` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7280](https://togithub.com/vimeo/psalm/pull/7280)
- Replaced deprecated `webmozart/path-util` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7292](https://togithub.com/vimeo/psalm/pull/7292)
- Indent heredoc by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7294](https://togithub.com/vimeo/psalm/pull/7294)
- Dropped dead code based on PHP_VERSION_ID by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7300](https://togithub.com/vimeo/psalm/pull/7300)
- Apply literal number separator rector by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7299](https://togithub.com/vimeo/psalm/pull/7299)
- Applied NullCoalescingOperatorRector by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7302](https://togithub.com/vimeo/psalm/pull/7302)
- Applied JsonThrowOnErrorRector by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7303](https://togithub.com/vimeo/psalm/pull/7303)
- Applied ListToArrayDestructRector by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7310](https://togithub.com/vimeo/psalm/pull/7310)
- replace `array` as a way to detect empty arrays by a dedicated method by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7313](https://togithub.com/vimeo/psalm/pull/7313)
- Applied ClosureToArrowFunctionRector by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7315](https://togithub.com/vimeo/psalm/pull/7315)
- Simplify object comparison by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7340](https://togithub.com/vimeo/psalm/pull/7340)
- Rename was_static property to is_static to be more accurate by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7358](https://togithub.com/vimeo/psalm/pull/7358)
- Add explicit `resolveSymlinks` option for project directories by [@dvz](https://togithub.com/dvz) in [https://github.com/vimeo/psalm/pull/7163](https://togithub.com/vimeo/psalm/pull/7163)
- Ensure that all entries in test arrays have explicit keys by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7386](https://togithub.com/vimeo/psalm/pull/7386)
- TCallableString is non-falsy (0 can't be a functionlike name) by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6521](https://togithub.com/vimeo/psalm/pull/6521)
- fix tests by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7446](https://togithub.com/vimeo/psalm/pull/7446)
- Use objects, not strings, for assertions by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/7410](https://togithub.com/vimeo/psalm/pull/7410)
- Nitpicks by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7448](https://togithub.com/vimeo/psalm/pull/7448)
- refactor description of types in Atomic by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7409](https://togithub.com/vimeo/psalm/pull/7409)
- remove TPositiveInt usage for TIntRange by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7472](https://togithub.com/vimeo/psalm/pull/7472)
- Fix ExceptionCodeTest provider shape by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7538](https://togithub.com/vimeo/psalm/pull/7538)
- Fix extension capitalization issue, add extensions to version message. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7574](https://togithub.com/vimeo/psalm/pull/7574)
- Added backward compatibility check by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7576](https://togithub.com/vimeo/psalm/pull/7576)
- Allow mocking final classes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7591](https://togithub.com/vimeo/psalm/pull/7591)
- Fixed composer branch-alias by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/7594](https://togithub.com/vimeo/psalm/pull/7594)
- No longer require declare reflection-docblock:^5 as dependency by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/7612](https://togithub.com/vimeo/psalm/pull/7612)
- Bump up phpunit,prophecy, and introduced phpspec/prophecy-phpunit by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/7617](https://togithub.com/vimeo/psalm/pull/7617)
- consistency in AssertionFinder by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7622](https://togithub.com/vimeo/psalm/pull/7622)
- skip a test because we removed the feature for now by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7642](https://togithub.com/vimeo/psalm/pull/7642)
- Adjust for composer-require-checker check. by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/7632](https://togithub.com/vimeo/psalm/pull/7632)
- Removed .scrutinizer.yml by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/7652](https://togithub.com/vimeo/psalm/pull/7652)
- Use `array_fill_keys()` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7661](https://togithub.com/vimeo/psalm/pull/7661)
- Fixed PSR-4 warnings by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7683](https://togithub.com/vimeo/psalm/pull/7683)
- chore: enable psl tests again by [@azjezz](https://togithub.com/azjezz) in [https://github.com/vimeo/psalm/pull/7596](https://togithub.com/vimeo/psalm/pull/7596)
- Make callbacks marked as static by [@SCIF](https://togithub.com/SCIF) in [https://github.com/vimeo/psalm/pull/6695](https://togithub.com/vimeo/psalm/pull/6695)
- Update master by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8024](https://togithub.com/vimeo/psalm/pull/8024)
- Run method call prohibition analyzer when cloning by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8155](https://togithub.com/vimeo/psalm/pull/8155)
- Avoid re-parsing template types by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8181](https://togithub.com/vimeo/psalm/pull/8181)
- Fix namespace of test by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8191](https://togithub.com/vimeo/psalm/pull/8191)
- update property map by [@discordier](https://togithub.com/discordier) in [https://github.com/vimeo/psalm/pull/8000](https://togithub.com/vimeo/psalm/pull/8000)
- Merge 4.x to master. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/8222](https://togithub.com/vimeo/psalm/pull/8222)
- Remove special handling for elseifs that breaks for else if by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8273](https://togithub.com/vimeo/psalm/pull/8273)
- Applied ArraySpreadInsteadOfArrayMergeRector (take 2) by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8345](https://togithub.com/vimeo/psalm/pull/8345)
- Merge 4.x by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8591](https://togithub.com/vimeo/psalm/pull/8591)
- Immutable readonly atomics by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8525](https://togithub.com/vimeo/psalm/pull/8525)
- Immutable unions by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8627](https://togithub.com/vimeo/psalm/pull/8627)
- Merge 4.x and documentation fixes by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8684](https://togithub.com/vimeo/psalm/pull/8684)
- Fix PSL e2e tests by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8697](https://togithub.com/vimeo/psalm/pull/8697)
- Cleanup documentation by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8702](https://togithub.com/vimeo/psalm/pull/8702)
- safe delete cache directory files by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8710](https://togithub.com/vimeo/psalm/pull/8710)
- improve cache flush debug info and code if cache disabled by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8707](https://togithub.com/vimeo/psalm/pull/8707)
- Fix cache race condition due to missing repopulation of lock files cache by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8714](https://togithub.com/vimeo/psalm/pull/8714)
- include CLI args in PHP errors to more quickly identify run issues in CI by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8724](https://togithub.com/vimeo/psalm/pull/8724)
- Enforce arrow function formatting by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8737](https://togithub.com/vimeo/psalm/pull/8737)
- Simplify issue sorting by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8736](https://togithub.com/vimeo/psalm/pull/8736)
- Correct `Clause::$hash` type by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8742](https://togithub.com/vimeo/psalm/pull/8742)
- Fix [#8743](https://togithub.com/vimeo/psalm/issues/8743) by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8751](https://togithub.com/vimeo/psalm/pull/8751)
- Switch from `phpspec/prophecy` to `mockery/mockery` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8755](https://togithub.com/vimeo/psalm/pull/8755)
- Test CI on 8.2 by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8752](https://togithub.com/vimeo/psalm/pull/8752)
- Move mockery plugin to require-dev by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8769](https://togithub.com/vimeo/psalm/pull/8769)
- bump lower dependencies by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8768](https://togithub.com/vimeo/psalm/pull/8768)
- Add diagnostic message when shape fields are missing by [@muglug](https://togithub.com/muglug) in [https://github.com/vimeo/psalm/pull/8762](https://togithub.com/vimeo/psalm/pull/8762)
- Move mockery to require-dev too by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8777](https://togithub.com/vimeo/psalm/pull/8777)
- Bump `slevomat/coding-standard` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8783](https://togithub.com/vimeo/psalm/pull/8783)
##### Typos
- fix mapped property type for DOMNode childNodes by [@cristianobaptista](https://togithub.com/cristianobaptista) in [https://github.com/vimeo/psalm/pull/8577](https://togithub.com/vimeo/psalm/pull/8577)
- Fix typo by [@zenahirsch](https://togithub.com/zenahirsch) in [https://github.com/vimeo/psalm/pull/8605](https://togithub.com/vimeo/psalm/pull/8605)
- Cleanup outdated comment by [@andrew-demb](https://togithub.com/andrew-demb) in [https://github.com/vimeo/psalm/pull/8699](https://togithub.com/vimeo/psalm/pull/8699)
##### Other changes
- Address flaw in type reconciliation on array references by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/8290](https://togithub.com/vimeo/psalm/pull/8290)
- Fix if propagation by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8326](https://togithub.com/vimeo/psalm/pull/8326)
- Begin immutable refactoring by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8143](https://togithub.com/vimeo/psalm/pull/8143)
- Fix properties-of on generic objects\&intersections + immutable atomic refactoring by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8442](https://togithub.com/vimeo/psalm/pull/8442)
- Immutable assertions by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8443](https://togithub.com/vimeo/psalm/pull/8443)
#### New Contributors
- [@petewalker](https://togithub.com/petewalker) made their first contribution in [https://github.com/vimeo/psalm/pull/7454](https://togithub.com/vimeo/psalm/pull/7454)
- [@mal-tee](https://togithub.com/mal-tee) made their first contribution in [https://github.com/vimeo/psalm/pull/7504](https://togithub.com/vimeo/psalm/pull/7504)
- [@Seldaek](https://togithub.com/Seldaek) made their first contribution in [https://github.com/vimeo/psalm/pull/7812](https://togithub.com/vimeo/psalm/pull/7812)
- [@dkemper](https://togithub.com/dkemper) made their first contribution in [https://github.com/vimeo/psalm/pull/7859](https://togithub.com/vimeo/psalm/pull/7859)
- [@discordier](https://togithub.com/discordier) made their first contribution in [https://github.com/vimeo/psalm/pull/8000](https://togithub.com/vimeo/psalm/pull/8000)
- [@pvandommelen](https://togithub.com/pvandommelen) made their first contribution in [https://github.com/vimeo/psalm/pull/8494](https://togithub.com/vimeo/psalm/pull/8494)
- [@cristianobaptista](https://togithub.com/cristianobaptista) made their first contribution in [https://github.com/vimeo/psalm/pull/8577](https://togithub.com/vimeo/psalm/pull/8577)
- [@pchapl](https://togithub.com/pchapl) made their first contribution in [https://github.com/vimeo/psalm/pull/8601](https://togithub.com/vimeo/psalm/pull/8601)
- [@zenahirsch](https://togithub.com/zenahirsch) made their first contribution in [https://github.com/vimeo/psalm/pull/8605](https://togithub.com/vimeo/psalm/pull/8605)
- [@mcaskill](https://togithub.com/mcaskill) made their first contribution in [https://github.com/vimeo/psalm/pull/8611](https://togithub.com/vimeo/psalm/pull/8611)
- [@webmaster777](https://togithub.com/webmaster777) made their first contribution in [https://github.com/vimeo/psalm/pull/8622](https://togithub.com/vimeo/psalm/pull/8622)
- [@come-nc](https://togithub.com/come-nc) made their first contribution in [https://github.com/vimeo/psalm/pull/8655](https://togithub.com/vimeo/psalm/pull/8655)
- [@bram123](https://togithub.com/bram123) made their first contribution in [https://github.com/vimeo/psalm/pull/8700](https://togithub.com/vimeo/psalm/pull/8700)
- [@annervisser](https://togithub.com/annervisser) made their first contribution in [https://github.com/vimeo/psalm/pull/8705](https://togithub.com/vimeo/psalm/pull/8705)
- [@Chi-teck](https://togithub.com/Chi-teck) made their first contribution in [https://github.com/vimeo/psalm/pull/8766](https://togithub.com/vimeo/psalm/pull/8766)
**Full Changelog**: https://github.com/vimeo/psalm/compare/4.30.0...5.0.0
Configuration
📅 Schedule: 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 is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
[ ] If you want to rebase/retry this PR, check this box
This PR contains the following updates:
^4.30.0
->^5.1.0
Release Notes
vimeo/psalm
### [`v5.1.0`](https://togithub.com/vimeo/psalm/releases/tag/5.1.0) [Compare Source](https://togithub.com/vimeo/psalm/compare/5.0.0...5.1.0) #### What's Changed ##### Deprecations - Defer cache directory creation until it's needed by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/8789](https://togithub.com/vimeo/psalm/pull/8789) ##### Features - check "never" return type more strictly by [@kkmuffme](https://togithub.com/kkmuffme) in [https://github.com/vimeo/psalm/pull/8624](https://togithub.com/vimeo/psalm/pull/8624) - Report by issues grouped by level and type by [@bdsl](https://togithub.com/bdsl) in [https://github.com/vimeo/psalm/pull/8774](https://togithub.com/vimeo/psalm/pull/8774) ##### Fixes - Ignore non-existing classes during initial scan of intersection types by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8794](https://togithub.com/vimeo/psalm/pull/8794) - handle true/false reconciliation consistently, fix [#8795](https://togithub.com/vimeo/psalm/issues/8795) by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8796](https://togithub.com/vimeo/psalm/pull/8796) - fix sealed combination by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/8798](https://togithub.com/vimeo/psalm/pull/8798) - Fix [#8806](https://togithub.com/vimeo/psalm/issues/8806) by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/8809](https://togithub.com/vimeo/psalm/pull/8809) ##### Docs - Update installation.md - `5` requires PHP >= 7.4 by [@sasezaki](https://togithub.com/sasezaki) in [https://github.com/vimeo/psalm/pull/8805](https://togithub.com/vimeo/psalm/pull/8805) - Adds documentation for the `forbiddenFunctions` config option by [@p810](https://togithub.com/p810) in [https://github.com/vimeo/psalm/pull/8808](https://togithub.com/vimeo/psalm/pull/8808) #### New Contributors - [@p810](https://togithub.com/p810) made their first contribution in [https://github.com/vimeo/psalm/pull/8808](https://togithub.com/vimeo/psalm/pull/8808) **Full Changelog**: https://github.com/vimeo/psalm/compare/5.0.0...5.1.0 ### [`v5.0.0`](https://togithub.com/vimeo/psalm/releases/tag/5.0.0): Psalm 5 [Compare Source](https://togithub.com/vimeo/psalm/compare/4.30.0...5.0.0) Welcome to Psalm 5! There's an accompanying post on psalm.dev, written by [@muglug](https://togithub.com/muglug) & the current maintainers of Psalm. - [read in English](https://psalm.dev/articles/psalm-5) - [read in Ukrainian](https://psalm.dev/articles/psalm-5-uk) (translated by [@weirdan](https://togithub.com/weirdan)) - [read in French](https://psalm.dev/articles/psalm-5-fr) (translated by [@orklah](https://togithub.com/orklah)) - [read in Italian](https://psalm.dev/articles/psalm-5-it) (translated by [@danog](https://togithub.com/danog)) #### What's Changed ##### Removed - Php version consistency by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6898](https://togithub.com/vimeo/psalm/pull/6898) - Removed TEmpty by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6662](https://togithub.com/vimeo/psalm/pull/6662) - remove support for allowPhpstormGenerics by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6705](https://togithub.com/vimeo/psalm/pull/6705) - remove exitFunctions for Psalm5 by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/6808](https://togithub.com/vimeo/psalm/pull/6808) - Drop legacy procedural files by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7270](https://togithub.com/vimeo/psalm/pull/7270) - Dropped removed config entries by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7272](https://togithub.com/vimeo/psalm/pull/7272) - Dropped legacy plugin API by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7275](https://togithub.com/vimeo/psalm/pull/7275) - Dropped deprecated `CodeIssue` methods by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7276](https://togithub.com/vimeo/psalm/pull/7276) - Dropped deprecated `DocComment` methods by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7278](https://togithub.com/vimeo/psalm/pull/7278) - Dropped `THtmlEscapedString` by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7285](https://togithub.com/vimeo/psalm/pull/7285) - Drop orphaned token by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7290](https://togithub.com/vimeo/psalm/pull/7290) - Bump PHP version to 7.4 by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7291](https://togithub.com/vimeo/psalm/pull/7291) - Remove forbidEcho by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7420](https://togithub.com/vimeo/psalm/pull/7420) - remove TPositiveInt by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7473](https://togithub.com/vimeo/psalm/pull/7473) - Lock event classes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7491](https://togithub.com/vimeo/psalm/pull/7491) - \[TASK] Add AfterFunctionLikeAnalysisEvent::getFunctionlikeStorage by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7526](https://togithub.com/vimeo/psalm/pull/7526) - Finalize (and internalize) more classes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7578](https://togithub.com/vimeo/psalm/pull/7578) - Finalize issues by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7595](https://togithub.com/vimeo/psalm/pull/7595) - Finalize storages by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7597](https://togithub.com/vimeo/psalm/pull/7597) - Finalize virtual nodes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7598](https://togithub.com/vimeo/psalm/pull/7598) - Finalize types nodes by [@weirdan](https://togithub.com/weirdan) in [https://github.com/vimeo/psalm/pull/7623](https://togithub.com/vimeo/psalm/pull/7623) - remove totallyTyped by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7651](https://togithub.com/vimeo/psalm/pull/7651) ##### Features - Support PHPStan notation for empty-arrays by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7312](https://togithub.com/vimeo/psalm/pull/7312) - Try to provide literal int types when possible (fixes [#6966](https://togithub.com/vimeo/psalm/issues/6966)) by [@ricardoboss](https://togithub.com/ricardoboss) in [https://github.com/vimeo/psalm/pull/7071](https://togithub.com/vimeo/psalm/pull/7071) - Allow config to define thread count by [@M1ke](https://togithub.com/M1ke) in [https://github.com/vimeo/psalm/pull/7442](https://togithub.com/vimeo/psalm/pull/7442) - Contextual type inference for high order function arg by [@klimick](https://togithub.com/klimick) in [https://github.com/vimeo/psalm/pull/7417](https://togithub.com/vimeo/psalm/pull/7417) - feat: Handle native intersection types by [@petewalker](https://togithub.com/petewalker) in [https://github.com/vimeo/psalm/pull/7454](https://togithub.com/vimeo/psalm/pull/7454) - improve support for enum_exists by [@orklah](https://togithub.com/orklah) in [https://github.com/vimeo/psalm/pull/7404](https://togithub.com/vimeo/psalm/pull/7404) - Support type annotations for class consts (fixes [#942](https://togithub.com/vimeo/psalm/issues/942)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7123](https://togithub.com/vimeo/psalm/pull/7123) - Improve class constant static analysis by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7154](https://togithub.com/vimeo/psalm/pull/7154) - Add support for references and improve UnusedVariable checks (fixes [#7254](https://togithub.com/vimeo/psalm/issues/7254)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7339](https://togithub.com/vimeo/psalm/pull/7339) - InternalTaintSinkMap: Add `getimagesize` as SSRF sink by [@mal-tee](https://togithub.com/mal-tee) in [https://github.com/vimeo/psalm/pull/7504](https://togithub.com/vimeo/psalm/pull/7504) - Enable extensions based on composer.json instead of those loaded at runtime (fixes [#5482](https://togithub.com/vimeo/psalm/issues/5482)). by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7107](https://togithub.com/vimeo/psalm/pull/7107) - Dynamic function storage provider by [@klimick](https://togithub.com/klimick) in [https://github.com/vimeo/psalm/pull/7471](https://togithub.com/vimeo/psalm/pull/7471) - ❗Allow plugins to modify Config::$fileExtensions early by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/6789](https://togithub.com/vimeo/psalm/pull/6789) - \[FEATURE] Introduce BeforeStatementAnalysisEvent by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7535](https://togithub.com/vimeo/psalm/pull/7535) - \[FEATURE] Allow to intercept adding issue in IssueBuffer by [@ohader](https://togithub.com/ohader) in [https://github.com/vimeo/psalm/pull/7530](https://togithub.com/vimeo/psalm/pull/7530) - Ensure all template parameters are specified in all extended|used classlikes by [@danog](https://togithub.com/danog) in [https://github.com/vimeo/psalm/pull/7492](https://togithub.com/vimeo/psalm/pull/7492) - feat: make key-of/value-of usable with non-const arrays by [@Patrick-Remy](https://togithub.com/Patrick-Remy) in [https://github.com/vimeo/psalm/pull/7396](https://togithub.com/vimeo/psalm/pull/7396) - More class const improvements. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7666](https://togithub.com/vimeo/psalm/pull/7666) - Add `@psalm-check-type` and `@psalm-check-type-exact`. by [@AndrolGenhald](https://togithub.com/AndrolGenhald) in [https://github.com/vimeo/psalm/pull/7686](https://togithub.com/vimeo/psalm/pull/7686) - feat(types): add properties-ofConfiguration
📅 Schedule: 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 is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
Read more about the use of Renovate Bot within
ocramius/*
projects.