Psalm 7.0.0-rc28 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.0-rc28 #psalm
GitHub
Release 7.0.0-rc28 · vimeo/psalm
What's Changed
Removed
Drop the BC baseline entry for an unreleased storage property by @alies-dev in #13000
Features
Accept PHP 8.6 as an analysis target and require nikic/php-parser ^5.9 b...
Removed
Drop the BC baseline entry for an unreleased storage property by @alies-dev in #13000
Features
Accept PHP 8.6 as an analysis target and require nikic/php-parser ^5.9 b...
🔥1
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Security analysis is on by default: types, taints and dead code in one pass, on a rewritten, 10x faster taint engine.
New: NoSQL, LLM prompt and URL injection, php://input and upload names as sources, taint through closures and generators.
Try it: https://psalm.dev/r/7631291cc5
New: NoSQL, LLM prompt and URL injection, php://input and upload names as sources, taint through closures and generators.
Try it: https://psalm.dev/r/7631291cc5
Hack-style purity: declare which side effects code may have (io, time, write-props...) and catch the "pure" function that reads the clock or edits its input.
Purity templates make array_map() and your interfaces as pure as what you pass them.
Try it: https://psalm.dev/r/be7eb39420
Purity templates make array_map() and your interfaces as pure as what you pass them.
Try it: https://psalm.dev/r/be7eb39420
Dead code detection on a reference graph: if nothing reachable uses it, Psalm finds it. Classes that only call each other, cycles included, and exceptions you create but never throw.
Try it: https://psalm.dev/r/31c62c069b
Try it: https://psalm.dev/r/31c62c069b
Template defaults for classes, functions and methods: Result<int> now means Result<int, RuntimeException>.
Libraries can add a template without breaking the types their users already wrote.
Try it: https://psalm.dev/r/4e21eb262e
Libraries can add a template without breaking the types their users already wrote.
Try it: https://psalm.dev/r/4e21eb262e
PHP 8.6 pipelines with partial application, fully typed:
$slug = $title |> trim(...) |> str_replace(' ', '-', ?);
// string
$title |> explode(' ', ?) |> strtolower(...);
// InvalidArgument: strtolower expects string, non-empty-list<string> given
Try it: https://psalm.dev/r/3c08a570e0
$slug = $title |> trim(...) |> str_replace(' ', '-', ?);
// string
$title |> explode(' ', ?) |> strtolower(...);
// InvalidArgument: strtolower expects string, non-empty-list<string> given
Try it: https://psalm.dev/r/3c08a570e0
Framework plugins in the box: PHPUnit, Mockery, Symfony, Laravel and sabre/event plugins switch on by themselves when your composer.json uses the library. Zero setup.
Daily releases from now on: features and fixes reach you the day they land. And the team grew: Alies Lapatsin joined the maintainers.
Upgrading is a dependency bump away: https://psalm.dev/docs/running_psalm/upgrading_to_psalm_7/
Upgrading is a dependency bump away: https://psalm.dev/docs/running_psalm/upgrading_to_psalm_7/
Psalm 7.0.1 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.1 #psalm
GitHub
Release 7.0.1 · vimeo/psalm
What's Changed
Fixes
Report each property write in a restricted purity context once by @danog in #13067
[7.x] Cut peak memory 22 to 25% (4.6 to 3.6 GB on Laravel) by stopping workers before un...
Fixes
Report each property write in a restricted purity context once by @danog in #13067
[7.x] Cut peak memory 22 to 25% (4.6 to 3.6 GB on Laravel) by stopping workers before un...
Psalm 7.0.2 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.2 #psalm
GitHub
Release 7.0.2 · vimeo/psalm
What's Changed
Fixes
Fix the caller of @internal checks in namespaced functions by @roxblnfk in #13136
Perf: speed up analysis with a warm cache by @alies-dev in #13153
fix(unused): don't ...
Fixes
Fix the caller of @internal checks in namespaced functions by @roxblnfk in #13136
Perf: speed up analysis with a warm cache by @alies-dev in #13153
fix(unused): don't ...
Psalm 7.0.3 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.3 #psalm
GitHub
Release 7.0.3 · vimeo/psalm
What's Changed
Fixes
Fix: issues found while scanning are lost with a warm cache by @alies-dev in #13156
fix(types): an array key that may be mixed is array-key by @jirkace in #13176
Fix impli...
Fixes
Fix: issues found while scanning are lost with a warm cache by @alies-dev in #13156
fix(types): an array key that may be mixed is array-key by @jirkace in #13176
Fix impli...
Psalm 6.20.9 has been released: https://github.com/vimeo/psalm/releases/tag/6.20.9 #psalm
GitHub
Release 6.20.9 · vimeo/psalm
What's Changed
Fixes
Fix LSP lookup of builtin functions in files not analyzed in-process by @M393 in #13237
[6.x] Infer return types for array_first and array_last (PHP 8.5) by @alies-dev in ...
Fixes
Fix LSP lookup of builtin functions in files not analyzed in-process by @M393 in #13237
[6.x] Infer return types for array_first and array_last (PHP 8.5) by @alies-dev in ...
Psalm 7.0.4 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.4 #psalm
GitHub
Release 7.0.4 · vimeo/psalm
What's Changed
Fixes
fix(baseline): merge duplicated files and issue types when reading a baseline by @jirkace in #13098
fix(visibility): drop the empty context from the inaccessible method me...
Fixes
fix(baseline): merge duplicated files and issue types when reading a baseline by @jirkace in #13098
fix(visibility): drop the empty context from the inaccessible method me...
Psalm 7.0.5 has been released: https://github.com/vimeo/psalm/releases/tag/7.0.5 #psalm
GitHub
Release 7.0.5 · vimeo/psalm
What's Changed
Fixes
feat(taint): json_encode() without JSON_PRETTY_PRINT removes the header taint by @jirkace in #12799
Feature/callmap signature return types by @orklah in #13167
Exclude ext...
Fixes
feat(taint): json_encode() without JSON_PRETTY_PRINT removes the header taint by @jirkace in #12799
Feature/callmap signature return types by @orklah in #13167
Exclude ext...