<rmcreative>

RSS

Все заметки с тегами «yii3, Psalm»

Можно уточнить:

  1. Границы применимости статического анализа в публичных пакетах

    16 июня

    В замечательном чате Валентина Удальцова «Пыхтелка» заметили релиз одной из библиотек Yii 3, Rate limiter и предложили вполне справедливые улучшения. kafkiansky сделал pull request, в который кроме, собственно, улучшений попало одно очень интересное изменение: вместо геттеров-сеттеров сделать свойства класса CounterState публичными и добавить на класс аннотацию @psalm-immutable:

    /**
     * @psalm-immutable
     */
    final class CounterState
    {
        public int $limit;
        public int $remaining;
        public int $resetTime;
        public bool $isLimitReached;

    Почему так:

    1. Используется статический анализ через Psalm.
    2. @psalm-immutable не даст присваивать что-либо этим свойствам, если его добавить в continuous integration.
    3. В будущем легче будет мигрировать на read only properties.
    4. Никакой логики здесь нет, это plain object. С аннотациями меньше кода.

    Неплохо. Я бы согласился, если бы речь шла исключительно про код внутри коммерческого проекта, который я контролирую полностью. В случае же публичного пакета:

    1. Мы не контролируем то, как пакет используется.
    2. Мы не можем гарантировать, что будет использоваться именно Psalm, что он будет запускаться в процессе CI, что вообще будет использоваться хоть какой-то статический анализ.

    То есть полагаться на статический анализ полностью и выкинуть часть кода в публичных пакетах, к сожалению, не получится.

    2 комментария