Добрый день, уважаемые хабровчане!

В последнее время в сообществе PHP часто слышу обсуждения по поводу code review, решил внести свой вклад, хочу рассказать о возможностях которые предназначены упростить вам жизнь и улучшить качество кода в вашем проекте. Актуально не только для PHP, подобные инструменты, описанным здесь, существуют также и для других языков программирования, например я узнал о таковых когда участвовал в проекте на NodeJS.

Хочу поделиться инструментами которые призваны улучшить качество кода, найти синтаксические ошибки, привести все к одному code style и т.п.

Pre-commit


Если в поисковике наберете “pre-commit php”, то он вам выдаст несколько уже готовых скриптов проводящих анализ написанного кода. Для git, скрипт надо разместить в папке “.git/hooks/” и тогда каждый раз, когда делаете commit он будет запускаться и если будут обнаружены ошибки, то просто не даст запушить код в репозиторий. Для некоторых IDE есть отдельные плагины которые делают то же самое, но что, если у вас большая команда и все пользуются разными редакторами? Да и настроить данный скрипт один раз, выложив его в ваш репозиторий, проще, нежели для каждого разработчика по отдельности настраивать его IDE. Что еще важно, в данный скрипт вы можете добавить любые другие инструменты которые используете в своей команде, такие как статический анализатор (например phpstan), и/или производить юнит тестирование (например phpunit)

Инструменты помогающие улучшить качество кода


php -l (Syntax check only (lint)) — встроенная в ядро PHP проверка синтаксиса.

php-cs-fixer (PHP Coding Standards Fixer) — Исправляет ваш код в соответствии со стандартами PSR-1, PSR-2 и т. д., или другим сообществам, таким как Symfony. Вы также можете определить свой (командный) стиль через конфигурацию. Т.е. во всей вашей команде стиль кода будет один.

php-cs + php-cbf (PHP CodeSniffer + PHP Code Beautifier) — Представляет собой набор из двух PHP-скриптов; Основной скрипт phpcs, который выделяет PHP, JavaScript и CSS-файлы для обнаружения нарушений определенного стандарта кодирования, а второй скрипт phpcbf автоматически исправляет стандартные нарушения кодирования. Схожий инструмент с php-cs-fixer.

php-md (PHP Mess Detector) — Побочный проект PHP Depend, цель которого стать PHP-эквивалентом хорошо известного инструмента Java PMD. Берет заданную базу исходного кода PHP и ищет несколько потенциальных проблем в этом источнике. Эти проблемы могут быть такими, как синтаксические ошибки, субоптимальный код, слишком сложные выражения, неиспользуемые параметры/методы/свойства.

php-cpd (PHP Copy/Paste Detector) — Детектор копирования / вставки для кода PHP. Т.е. находит одинаковые блоки кода в различных частях приложения которые можно вынести в отдельные функции/методы.

Вы можете более глубоко погрузиться в автоматизацию проверки кода и вероятно найдете много других интересных инструментов.

Вывод


Используя имеющиеся в мире разработки инструменты многие рутинные процессы по проверке кода вы можете автоматизировать, что на порядок улучшит его качество (т.к. мы исключаем человеческий фактор). Для большей уверенности в использовании этих инструментов всей командой их можно внедрять в pre-commit скрипт который запускается перед созданием коммита в вашей системе управления версиями.