collections icon indicating copy to clipboard operation
collections copied to clipboard

Not correct psalm return type for filter

Open Legion112 opened this issue 3 years ago • 3 comments

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. image

<?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;
}

Legion112 avatar May 13 '21 15:05 Legion112

The problem with the filter method. I think psalm annotation is not correct for this method.

Legion112 avatar May 13 '21 15:05 Legion112

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 avatar Aug 18 '22 21:08 VincentLanglet

@VincentLanglet I guess and issue should be created there to describe what need to be done.

Legion112 avatar Aug 22 '22 10:08 Legion112