What's Changed
Features
- Show success message and type stats with GHA formatter by @weirdan in #10145
- New sinks for TaintedCallable #10117 by @cgocast in #10154
- Properly inherit assertions from parents or implemented faces by @boesing in #10157
- Flag invalid declares by @weirdan in #10176
- Narrow
ArrayObject
TKey
template by @boesing in #10190 - Allow object assertions for
mixed
values by @boesing in #10207 - Issue handlers priority by @gmessier in #10202
- Check for declare strict_types in block mode by @tuqqu in #10234
- feat(LSP): Improve the autocomplete for nested array shape by @ging-dev in #10230
- Add alias support to psalm-check-type by @robchett in #10264
- Allow parameter names in callable docblocks with templates by @robchett in #10261
- Disallow
never
type for parameters by @tuqqu in #10266 - Fix auto completion by partial property or method by @issidorov in #10320
- Add stubs for rdKafka by @robchett in #10351
- Suppressing NoValue should not treat subsequent code as unevaluated by @kkmuffme in #10303
- Fix misc callable bugs by @kkmuffme in #10370
Fixes
- Added more gc_status return fields by @weirdan in #10138
- Filter baseline when checking individual files by @edsrzf in #10115
- Assertion enhancements regarding
value-of
in combination with backed enums by @boesing in #10150 strrchr()
:$before_needle
parameter by @weirdan in #10151- Update
mysqli
stub by @weirdan in #10155 - Fix crash on property access to undefined property on a class with a missing dependncy by @weirdan in #10159
- Prevent infinite-loop when resolving type-aliases by @boesing in #10156
- InheritorViolation was only being triggered on grand-childen classes by @robchett in #10169
- Restore support for namespaced functions in referencedFunction config by @tscni in #10186
DateTimeZone::getName()
always returnsnon-empty-string
by @gsteel in #10187- Only the binary op 'plus' works with two arrays by @robchett in #10209
- Add openssl_*_export_to_file to impure functions by @robchett in #10210
- add FILTER_SANITIZE_URL filter to filter_var by @kkmuffme in #10214
- Allow class-string where T is a union by @MidnightDesign in #10194
- Loop over PDOStatement::fetch() arguments by @cgocast in #10237
- Inherited assertions v2 by @boesing in #10189
- Resolve inherited conditional return types by @boesing in #10191
- Allow stringable objects in
sprintf()
values by @MidnightDesign in #10231 - fix: #10239 by @ging-dev in #10240
- Remove duplicate namespace in InternalMethod error message by @kkmuffme in #10241
- Add stream_socket_shutdown socket_shutdown to impure function list by @tuqqu in #10244
- Emit
MethodSignatureMismatch
when descendant does not return by reference by @tuqqu in #10248 - Negated class_exist check on class-string converts to string instead of mixed by @robchett in #10262
- Fix error message for implicitly returning functions with
never
return type by @tuqqu in #10254 - Type check nested templates by @klimick in #10271
- Fix return of BadSqlTainter::afterExpressionAnalysis() by @cgocast in #10270
- Allow tainted numerics except for 'html' and 'has_quotes' by @cgocast in #10242
- fix final class constant type by @kk-daniel in #10279
- Fix inferring enum case value from a class constant by @tuqqu in #10274
- fix: #10080 by @ging-dev in #10228
- Fix memory explosion with calls to method_exists by @robchett in #10290
- Additional caching fixes by @ging-dev in #10289
- str_replace / substr_replace signature improvements by @mathroc in #10277
- Fix method calls and property accesses after extension_loaded by @danog in #10295
- fix @param-out with named arguments by @kk-daniel in #10312
- Narrow down
get_browser
returning array or object by @simonberger in #10314 - Allow int keys when calling Redis methods by @greg0ire in #10355
- Finding methods and properties for auto completion feature by @issidorov in #10385
- update decimal stubs from documented URL by @kkmuffme in #10379
- Fix Phar build failure by @tscni in #10391
- Fix redundant condition mixed type escape hatch & loose comparison int type shouldnt be mixed by @kkmuffme in #10388
- Fix #10398: add missing methods of ReflectionProperty class in CallMap and CallMap deltas. by @niconoe- in #10399
Docs
- docs: A semicolon expected by @lens0021 in #10149
- Add documentation for @psalm-flow by @ohader in #10349
Internal changes
- Extract the list of impure functions into its own dictionary by @weirdan in #10136
composer.json
tweaks by @weirdan in #10161- Bump actions/checkout from 3 to 4 by @dependabot in #10192
- Update IssueBuffer.php by @aleksandr-shevchenko in #10294
- Backport rector fixes to 5.x by @danog in #10306
- Bump fkirc/skip-duplicate-actions from 5.3.0 to 5.3.1 by @dependabot in #10313
- Allow Symfony 7 by @kbond in #10335
- Get rid of legacy 7.3 logic by @danog in #10319
- Finalize all internal classes by @danog in #10318
- fix CI "split" unevenly splits the number of tests by @kkmuffme in #10389
- Fix circleci builds by @danog in #10396
Other changes
New Contributors
- @lens0021 made their first contribution in #10149
- @kk-daniel made their first contribution in #10279
- @aleksandr-shevchenko made their first contribution in #10294
- @simonberger made their first contribution in #10314
- @kbond made their first contribution in #10335
- @issidorov made their first contribution in #10320
Full Changelog: 5.15.0...5.16.0