Звучит как будто подключить на Битрикс проект 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 и там рассматривать большие полотна отчёта об ошибках не так уж и удобно.
Разработчик jscpd уже сам его переписал на Rust: https://github.com/kucherenko/jscpd/tree/master/rust Crate: https://crates.io/crates/jscpd
Звучит как будто подключить на Битрикс проект phpstan экстремально просто, но если вы в коде используете, скажем, метод add наследника DataManager, то можете упасть с ошибкой от phpstan говорящей о том что он не знает этого DataManager. Потом окажется, что в ядре этот DataManager не настоящий, а class_alias'нутый. В итоге приходится через bootstrap-файл phpstan'а вызывать все эти alias'ы после classmap'инга всех нужных модулей.
Ещё одной большой болью является тот факт, что в ядре масса методов, phpdoc'кументация которых врёт. Вот прямо врёт - говорит что возвращает один тип, а по факту возвращает всегда другой. phpstan поддерживает stub-файлы. Ура? Нет.
В редком случае можно разместить один файл в stub'ы и всё. В реальности, одно за другое целпяется и чуть ли не всё ядро надо описывать. Для решения этой проблемы можно воспользоваться php-stubs/generator, но там тоже начинают возникать проблемы одна за другой, в итоге так это и не поборол.
А что касается pre-commit хука, это только на первый взгляд кажется хорошей идеей. А вот если phpstan думает 5 минут, то становится как-то печально. К тому же, для многих типовой сценарий - коммитить через некий GUI, например в PhpStorm и там рассматривать большие полотна отчёта об ошибках не так уж и удобно.