collections
collections copied to clipboard
Not correct psalm return type for filter
This code is valid for plain array_filter for the psalm.
https://psalm.dev/r/31351f98b0
But if you try to do a similar thing with the collection psalm will tell it is not valid.
<?php
declare(strict_types=1);
require '../vendor/autoload.php';
use Doctrine\Common\Collections\ArrayCollection;
class Test {
public int $a = 1;
}
$array = [];
$array[] = random_int(0, 1) === 1 ? new Test : null;
$array = new ArrayCollection($array);
$array = $array->filter(static fn(?Test $t):bool => $t !== null);
$array = $array->map(static fn(Test $t) => $t->a);
foreach ($array as $t) {
echo $t;
}
The problem with the filter
method. I think psalm annotation is not correct for this method.
It's because psalm has a specific ReturnTypeProvider for array_filter. https://github.com/vimeo/psalm/blob/4.x/src/Psalm/Internal/Provider/ReturnTypeProvider/ArrayFilterReturnTypeProvider.php
It require to do the same for Collection::filter in this repository https://github.com/psalm/psalm-plugin-doctrine/tree/2.x/src/Provider/ReturnTypeProvider
@VincentLanglet I guess and issue should be created there to describe what need to be done.