Git Product home page Git Product logo

Comments (1)

psalm-github-bot avatar psalm-github-bot commented on September 26, 2024

I found these snippets:

https://psalm.dev/r/b4c4f99a60
<?php

/**
 * @template T
 */
class Example
{
    /** @param T $value */
	function __construct(private mixed $value) {}
    
    /** @return T */
    function getValue(): mixed
    {
        return $this->value;
    }
    
    /** @param T $value */
    function setValue(mixed $value): void
    {
    	$this->value = $value;
    }

    /**
     * @template T2
     * @param self<T2> $another
     */
    function example(self $another): void
    {
        /** @psalm-trace $anotherValue */
        $anotherValue = $another->getValue();
        
        $another->setValue($anotherValue); // expects T, but should expect T2
    }
}
Psalm output (using commit ef3b018):

INFO: Trace - 30:9 - $anotherValue: T2:fn-example::example as mixed

ERROR: InvalidArgument - 32:28 - Argument 1 of Example::setValue expects T:Example as mixed, but T2:fn-example::example as mixed provided
https://psalm.dev/r/a5a7b5ed21
<?php

/**
 * @template T
 * @psalm-consistent-constructor
 * @psalm-consistent-templates
 */
class Collection
{
    /** @param list<T> $values */
    function __construct(private array $values = [])
    {
    }
    
    /** @param T $value */
    function add(mixed $value): void
    {
        $this->values[] = $value;
    }
    
    /**
     * @param positive-int $size
     * @return self<static<T>>
     */
    function chunk(int $size): self
    {
        /**
         * @var self<static<T>> $chunks
         * @psalm-trace $chunks
         */
        $chunks = new self();

        foreach (\array_chunk($this->values, $size) as $chunk) {
            /** @psalm-trace $chunk */
            $chunk = new static($chunk);
            
            $chunks->add($chunk); // expects T, but should expect static<T>
        }

        return $chunks;
    }
}
Psalm output (using commit ef3b018):

INFO: Trace - 31:9 - $chunks: Collection<Collection<T:Collection as mixed>&static>

INFO: Trace - 35:13 - $chunk: Collection<T:Collection as mixed>&static

ERROR: InvalidArgument - 37:26 - Argument 1 of Collection::add expects T:Collection as mixed, but Collection<T:Collection as mixed>&static provided

from psalm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.