Как стать автором
Обновить

Как статический анализ на основе PHPstan позволил снизить число ошибок на проекте и получить стабильный код

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров2.7K
Всего голосов 13: ↑12 и ↓1+16
Комментарии8

Комментарии 8

Не в теме современного PHP, но название PHPStan запоминается. Кажется, что это страна, где все пишут на старом PHP, ходят в длинной белой одежде и ездят на слонах.

Если честно странная статья, всеравно что 10 лет назад написать о том что мы используем git как это круто ;)

Почемуто считал что все адекватные проекты уже лет 10 как используют линтеры, стат анализаторы, тесты и прочие радости жизни и это минимальный набор инструментов для разработки, а не "рокетсайнс"

может всю логику в файле pre-commitперенести в отдельный php файл и уже его запускать?

Не совсем понял, о чем речь. Это не логика проекта и вообще не php-скрипт, это скрипт самого гита

Звучит как будто подключить на Битрикс проект phpstan экстремально просто, но если вы в коде используете, скажем, метод add наследника DataManager, то можете упасть с ошибкой от phpstan говорящей о том что он не знает этого DataManager. Потом окажется, что в ядре этот DataManager не настоящий, а class_alias'нутый. В итоге приходится через bootstrap-файл phpstan'а вызывать все эти alias'ы после classmap'инга всех нужных модулей.

Ещё одной большой болью является тот факт, что в ядре масса методов, phpdoc'кументация которых врёт. Вот прямо врёт - говорит что возвращает один тип, а по факту возвращает всегда другой. phpstan поддерживает stub-файлы. Ура? Нет.

Why is PHPStan complaining about “Class not found” in a stub file?

Stub files are analysed independently from the rest of your codebase. This means that any type they’re referencing must also be present as a stub, even if you don’t want to override any of its PHPDocs.

В редком случае можно разместить один файл в stub'ы и всё. В реальности, одно за другое целпяется и чуть ли не всё ядро надо описывать. Для решения этой проблемы можно воспользоваться php-stubs/generator, но там тоже начинают возникать проблемы одна за другой, в итоге так это и не поборол.

А что касается pre-commit хука, это только на первый взгляд кажется хорошей идеей. А вот если phpstan думает 5 минут, то становится как-то печально. К тому же, для многих типовой сценарий - коммитить через некий GUI, например в PhpStorm и там рассматривать большие полотна отчёта об ошибках не так уж и удобно.

Согласен. В принципе подключение к Битриксу PHPStan - не тривиальная задача, и, скорее всего, от проекта к проекту проблемы будут возникать разные. К примеру на текущем проекте проблем с DataManager'ом у нас не возникало из-за использования самописной ORM. А что касается pre-commit'a - это лишь одно из возможных решений в текущей (битрикс) ситуации. На самом деле, лично меня это не особо напрягает, если не делать коммиты каждые 10 минут, а 1-3 раза в день, то даже если PHPStan думает 5 минут - это отличное время сходить налить кофе или перекурить

Соболезную команде разработки коруса и всем тем, кто ставит на прекомит запуск чего-то. Мой вам совет, не делайте так никогда.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий