Как заставить PhpStorm показывать исключения, генерируемые методами, объявленными с помощью @method (или наследовать их от магического метода docblock)? - PullRequest
0 голосов
/ 27 июня 2018

Принимая следующий пример кода:

/**
 * @method bool someMethod()
 */
class MyClass
{
    /**
     * @throws MyClassException
     */
    public function __call($method, $args)
    {
        if ($this->someCheck()) {
            throw new MyClassException();
        }
    }
}

//...
try {
    (new MyClass())->someMethod();
} catch (MyClassException $e) {  // Reported by PHPStorm as not thrown!
    // of course the exception is properly caught
}

Как я могу заставить IDE обнаруживать исключения, генерируемые методами, объявленными с @method docblock? Интересно, если это вообще возможно сделать, если нет - каковы мои альтернативы?

Кажется, что @throws, объявленное в магических методах, полностью игнорируется в подобных случаях. Конечно, я мог бы отключить проверки, но это не чистое решение для меня ...

Ответы [ 2 ]

0 голосов
/ 26 июля 2018

Вы можете задокументировать исключения для магических методов следующим образом:

/**
 * MyClass summary.
 * 
 * @method bool someMethod() {
 *     @throws MyClassException
 * }
 */
class MyClass {

    // ...
}

Этот синтаксис является частью PSR-5 draft . Стандарт все еще не принят, но в PhpStorm он работает довольно хорошо.

0 голосов
/ 27 июня 2018

В нем говорится, что это возможно в течение некоторого времени (в некоторых версиях 2018.1.x, если я правильно читаю билет), но затем оно было отменено в 2018.1.3 «из-за проблем с юзабилити».

Я согласен с этим - не все будут рады видеть необработанные предупреждения об исключениях для каждого вызова магического метода (например, Laravel использует это часто) - просто потому, что не каждый магический метод может генерировать исключения.

В любом случае: https://youtrack.jetbrains.com/issue/WI-39284 - просмотрите этот билет (звезда / голосование / комментарий), чтобы получать уведомления о любом прогрессе.

...