PHPStan генерирует неопределенный статический метод при использовании пользовательских правил в Respect/Validation

Я использую класс https://github.com/Respect/Validation и у меня есть пользовательское правило CustomRule() который отлично работает:

use Respect\Validation\Validator as v;

// ...

'email' => v::CustomRule()->email()->setName('email');

Но это заставляет PHPStan выдавать ошибку:

Call to an undefined static method Respect\Validation\Validator::CustomRule().

Но если я перемещу его после встроенного правила (например, email()), PHPStan работает нормально, ошибок нет:

'email' => v::email()->CustomRule()->setName('email');

Для ясности, оба кода работают, но PHPStan считает, что первый код недействителен.

Любой обходной путь, чтобы PHPStan принял его, даже если CustomRule() был установлен первым?

Обновить:

Я обнаружил, что если я отредактирую блок документации Respect\Validation\Validator Класс и добавить мое пользовательское правило в список его встроенных правил, это работает!

/**
* ...
* @method static Validator CustomRule()
*/
class Validator extends AllOf
...

Конечно, плохая идея напрямую модифицировать блок документации из основного класса. Тем не менее, мой вопрос остается прежним. Или, может быть, есть способ для PHPStan почтить мой собственный блок документов от моего CustomRule учебный класс?

1 ответ

Столкнулся с той же проблемой. Я просто добавил пользовательские валидаторы в конфигурационный файл phpstan (phpstan.neon). Это можно сделать с помощью регулярных выражений, например:

parameters:
    ignoreErrors:
        - '#Call to an undefined method Respect\\Validation\\Validator::[a-zA-Z0-9\\_]()#'

Документы: https://github.com/phpstan/phpstan

Хотя это скорее обходной путь.

Другие вопросы по тегам