Skip to content

Incorrect behavior of ClassMethodArrayDocblockParamFromLocalCallsRector #9835

Description

@andersonamuller

Bug Report

Subject Details
Rector version 2.5.9
Installed as composer dependency

Minimal PHP Code Causing Issue

See https://getrector.com/demo/e911c6c9-d5cc-4c8a-b3f4-24cd899a7a0e

<?php

interface SomeSearch
{
    /**
     * @param array{alias?: string, id?: string} $criteria
     */
    public function findOneMatching(array $criteria): ?object;
}


final class OrmSomeSearch implements SomeSearch
{
    public function findOneById(string $id): ?\stdClass
    {
        return $this->findOneMatching(['id' => $id]);
    }
    
    #[\Override]
    public function findOneMatching(array $criteria): ?\stdClass
    {
        if ([] === $criteria) {
            return null;
        }
        
        foreach ($criteria as $field => $value) {
            \assert(\is_string($field));
        }
        
        return new \stdClass();
    }
}

Responsible rules

  • ClassMethodArrayDocblockParamFromLocalCallsRector

Expected Behavior

Rector should skip this rule as the interface already declares a more narrow type.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions