Библиотека пхпшника | PHP, Laravel, Symfony, CodeIgniter
11.3K subscribers
1.35K photos
20 videos
26 files
4.04K links
Все самое полезное для пхпшника в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/bca892d6

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a5d13cd6fa92100ee6f68b
加入频道
#psalm

Если вы работаете с псалмом, то могли испытывать трудности с вендорным кодом, который используете в проекте и который плохо понимает псалм. Чтобы не супрессить ошибки, вы можете написать стабы на уже существующий код и подсказать псалму необходимые типы. Чтобы не делать это самому, можно поставить плагины.

Например, плагин для доктрины с многочисленными стабами:
https://github.com/weirdan/doctrine-psalm-plugin

Плагин для симфони, который помогает решить некоторые проблемы вывода типов:
https://github.com/psalm/psalm-plugin-symfony

Или плагин для ларавеля, который следит за тем, чтобы вы не использовали в коде фасады, хелперы и другие виды сервис-локаторов:
https://github.com/kafkiansky/service-locator-interrupter
#psalm

Как использовать Psalm на легаси проекте

Если вы задумались о необходимости использования Psalm'а на большом легаси проекте, вам нужно подумать, что делать с текущими ошибками, которых наверняка может быть больше тысячи.

Править их все сразу — это мог быть правильный вариант, если не был бы таким утомительным и долгим.

Глобально подавлять ошибки — это однозначно плохой способ, так как повлияет и на новый код.

Конфиг

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

<psalm>
....
<projectFiles>
<directory name="src"/>
<ignoreFiles>
<directory name="src/Module1"/>
<directory name="src/Module2"/>
<directory name="src/Module3"/>
</ignoreFiles>
</projectFiles>
....
</psalm>


Этот способ имеет ещё один недостаток: наверняка вы до сих пор что-то правите в этих модулях, и тогда ваш новый код в старых модулях тоже не будет проанализирован псалмом. Но вы же не этого добивались?

psalm-baseline

У псалма есть решение для таких случаев — baseline. Данный способ найдёт и сохранит все текущие ошибки в конкретный xml файл и будет их игнорировать при анализе. Также вам не придётся игнорировать директории и глобально подавлять ошибки. Зато новый код в любых директориях — новых и старых — будет успешно проанализирован псалмом. Чтобы настроить baseline, вам необходимо выполнить следующую команду в вашем проекте:

./vendor/bin/psalm --set-baseline=psalm-baseline.xml


У вас в проекте появится psalm-baseline.xml файл, который необходимо закоммитить. Теперь вы сможете спокойно использовать psalm в CI. Только не забывайте в свободное время править ошибки в старых модулях. Когда вы поправите часть из них, обновите baseline:

./vendor/bin/psalm --update-baseline


И так до тех пор, пока вы не избавитесь от всех ошибок, либо не удалите модули, заменив их новыми 😎.
👍17🔥5