Skip to content

Static analysis

To help static analysis of a codebase using this library, an extension for PHPStan and a plugin for Psalm are provided. They enable these tools to better understand the behaviour of the mapper.

Considering at least one of those tools are installed on a project, below are examples of the kind of errors that would be reported.

Mapping to an array of classes

final class SomeClass
    public function __construct(
        public readonly string $foo,
        public readonly int $bar,
    ) {}

$objects = (new \CuyZ\Valinor\MapperBuilder())
        'array<' . SomeClass::class . '>',
        [/* … */]

foreach ($objects as $object) {
    // ✅
    echo $object->foo;

    // ✅
    echo $object->bar * 2;

    // ❌ Cannot perform operation between `string` and `int`
    echo $object->foo * $object->bar;

    // ❌ Property `SomeClass::$fiz` is not defined
    echo $object->fiz;

Mapping to a shaped array

$array = (new \CuyZ\Valinor\MapperBuilder())
        'array{foo: string, bar: int}',
        [/* … */]

// ✅
echo $array['foo'];

// ❌ Expected `string` but got `int`
echo strtolower($array['bar']);

// ❌ Cannot perform operation between `string` and `int`
echo $array['foo'] * $array['bar'];

// ❌ Offset `fiz` does not exist on array
echo $array['fiz']; 

To activate this feature, the configuration must be updated for the installed tool(s):

    - vendor/cuyz/valinor/qa/PHPStan/valinor-phpstan-configuration.php
    <plugin filename="vendor/cuyz/valinor/qa/Psalm/Plugin/TreeMapperPsalmPlugin.php"/>
Back to top