#advanced #video
Обзор и интеграция статического анализатора кода Psalm.
https://www.youtube.com/watch?v=gENscy_lrYs
Обзор и интеграция статического анализатора кода Psalm.
https://www.youtube.com/watch?v=gENscy_lrYs
YouTube
PSALM, статический анализ PHP проекта
Интеграция https://psalm.dev/ в ваш проект.
https://github.com/smpl/example/pull/4
Наш чат: https://yangx.top/dev_ru
#PSALM
#PHP
https://github.com/smpl/example/pull/4
Наш чат: https://yangx.top/dev_ru
#PSALM
#PHP
#psalm
Если вы работаете с псалмом, то могли испытывать трудности с вендорным кодом, который используете в проекте и который плохо понимает псалм. Чтобы не супрессить ошибки, вы можете написать стабы на уже существующий код и подсказать псалму необходимые типы. Чтобы не делать это самому, можно поставить плагины.
Например, плагин для доктрины с многочисленными стабами:
https://github.com/weirdan/doctrine-psalm-plugin
Плагин для симфони, который помогает решить некоторые проблемы вывода типов:
https://github.com/psalm/psalm-plugin-symfony
Или плагин для ларавеля, который следит за тем, чтобы вы не использовали в коде фасады, хелперы и другие виды сервис-локаторов:
https://github.com/kafkiansky/service-locator-interrupter
Если вы работаете с псалмом, то могли испытывать трудности с вендорным кодом, который используете в проекте и который плохо понимает псалм. Чтобы не супрессить ошибки, вы можете написать стабы на уже существующий код и подсказать псалму необходимые типы. Чтобы не делать это самому, можно поставить плагины.
Например, плагин для доктрины с многочисленными стабами:
https://github.com/weirdan/doctrine-psalm-plugin
Плагин для симфони, который помогает решить некоторые проблемы вывода типов:
https://github.com/psalm/psalm-plugin-symfony
Или плагин для ларавеля, который следит за тем, чтобы вы не использовали в коде фасады, хелперы и другие виды сервис-локаторов:
https://github.com/kafkiansky/service-locator-interrupter
GitHub
GitHub - psalm/psalm-plugin-doctrine: Stubs to let Psalm understand Doctrine better
Stubs to let Psalm understand Doctrine better. Contribute to psalm/psalm-plugin-doctrine development by creating an account on GitHub.
#psalm
Как использовать Psalm на легаси проекте
Если вы задумались о необходимости использования Psalm'а на большом легаси проекте, вам нужно подумать, что делать с текущими ошибками, которых наверняка может быть больше тысячи.
Править их все сразу — это мог быть правильный вариант, если не был бы таким утомительным и долгим.
Глобально подавлять ошибки — это однозначно плохой способ, так как повлияет и на новый код.
Конфиг
Можно воспользоваться конфигом псалма и заигнорировать те директории, где расположен старый код. Однако в таком варианте необходимо, чтобы старый код был однозначно локализован. Такое возможно при наличии некоего подобия модулей, чем может похвастаться далеко не каждый легаси проект.
Этот способ имеет ещё один недостаток: наверняка вы до сих пор что-то правите в этих модулях, и тогда ваш новый код в старых модулях тоже не будет проанализирован псалмом. Но вы же не этого добивались?
psalm-baseline
У псалма есть решение для таких случаев —
У вас в проекте появится
И так до тех пор, пока вы не избавитесь от всех ошибок, либо не удалите модули, заменив их новыми 😎.
Как использовать 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