-
-
Notifications
You must be signed in to change notification settings - Fork 946
Closed
Closed
Copy link
Description
Bug report
Since PHPstan 2.1.34, it declares that one of @param-out union type is never assigned, so it can be removed, but it is a possible return type. If I remove the type that's apparently never assigned, I get the opposite error that the @param-out type is too narrow.
/**
*
* @param array{
* key1: int
* } $item
*
* @param-out array{
* key1: int
* }|array{
* key2: float
* } $item
*
*/
function example(array &$item): void
{
if (!empty($item["key1"])) {
$item['key2'] = 1.00;
unset($item["key1"]);
}
}Error:
Function example() never assigns array{key1: int} to &$item so it can be removed from the @param-out type.
Code snippet that reproduces the problem
https://phpstan.org/r/12b15a19-d9c7-4dae-b7b7-029b2b8cc4cc
Expected output
If the if condition is false, then key1 key will still be set, and so the @param-out type is correct
Did PHPStan help you today? Did it make you happy in any way?
Great work as always!
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels