CSS. Cascading Style Sheets. We know them, we use them, we – well, “love” might be a strong word, but we certainly use them. Whether you’re a Bootstrap evangelist, or a do-it-yourself purist, if you’ve ever designed a website, you’ve at some point had to write some CSS. This means that at some point you’ve had to read some CSS, and perhaps even modify someone else’s. In that case, you know the…
Проверка соблюдения стандартов кодирования в PHP на примере связки Denwer3 + Code Sniffer + PhpStorm4 + SVN
Если над проектом работает несколько человек, то рано или поздно встаёт вопрос, что неплохо было бы выработать общие правила кодирования. Так как, когда код оформлен единообразно, то значительно улучшается его читаемость, да и ошибки увидеть проще.
Конечно, попытка внедрения стиля кодирования в команде программистов может вызвать на первом этапе сопротивление тех, кто не любит писать комментарии к классам и методам или тех, кому придётся пересмотреть свой стиль написания кода. Но как показывает мой опыт, если программистам предоставить удобный инструмент для отслеживания стиля, то переход на единый стандарт пройдёт менее болезненно, а через некоторое время вопрос "Зачем это надо?" будет совершенно не актуален.
Ниже я рассмотрю настройку рабочего места PHP програмиста, для работы с автоматическим контролёром стиля кодирования PHP Code Sniffer.
Буду отталкиваться от того, что используется операционная система Windows с установленным пакетом Denwer3.
Для того, чтобы поставить Code Sniffer нам необходимо использовать PEAR, который в стандартной поставке Denwer3 не идёт. Поэтому после установки Денвера, надо установить ещё и пакет расширений (при выключенном вебсервере).
Так выглядит директория с php до установки пакета расширений (D:\WebServers5.3.1 - это директория в которую установлен Denwer, у вас она может быть другая):
Так выглядит директория с php после установки пакета расширений:
Теперь нам надо установить PEAR - это репозиторий пакетов расширений PHP. Для этого надо в директорию с php скачать файл http://pear.php.net/go-pear.phar.
Дальше нам придётся работать с командной строкой, поэтому используйте любую программу, которая умеет это делать (например FAR) или стандартным средством Windows cmd.exe.
В каталоге Денвера с php надо запустить go-pear.bat. Если вы работаете с несколькими копиями Денвера или Денвер установлен у вас на флешке, то на вопрос PEAR'a ставить его в систему или локально надо ответить local. Затем PEAR ещё раз попросит вас проверить все директории, куда он производит установку и спросит, переписать ли php.ini. Везде отвечаем утвердительно. Всё, PEAR установлен.
Теперь надо поставить сам PHP_CodeSniffer. Для этого опять же в каталоге с php в командной строке пишем:
pear install PHP_CodeSniffer
Ошибка "No releases available for package "pear.php.net/PHP_CodeSniffer" может возникнуть, когда установка PEAR уже выполнялась до этого. У PEAR'a есть кеш, который просто надо чистить между установками. Находится он в "C:\Documents and Settings\<Пользователь>\Local Settings\Temp\pear".
После установки в директории PEAR появится каталог PHP, в котором и располагается CodeSniffer.
В поставке Code Sniffer'а уже идёт несколько стандартов кодирования: PEAR, PHPCS, Squiz и Zend. Поэтому можно использовать один из них. А можно написать и свой собственный стандарт (об этом я расскажу чуть позже). Так же можно гибко настроить сниффер, чтобы выборочно проверять директории проекта, ведь в нём могут использоваться сторонние библиотеки, приводить которые к своему стандарту кодирования не стоит.
Теперь поговорим о том, как использовать Code Sniffer. Об этом подробно написано в документации к пакету. Если кратко, то в каталоге с php есть bat-файл phpcs.bat. Если запустить его из командной строки, например так:
phpcs.bat X:\home\sl-dima\www\index.php
То он проверит указанный в параметре файл и выдаст по нему отчёт:
FILE: X:\home\sl-dima\www\index.php
--------------------------------------------------------------------------------
FOUND 2 ERROR(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
10 | ERROR | Missing @license tag in file comment
10 | ERROR | Missing @link tag in file comment
--------------------------------------------------------------------------------
Можно указать не только один файл, но и целую директорию. Если ваша IDE поддерживает работу с командной строкой, то можно на горячую кнопку повесить вызов phpcs.bat с передачей параметром пути к открытому в IDE файлу.
Но если вы пользуетесь IDE JetBrains PHPStorm 4, то в нём поддержка Code Sniffer включена в стандартные возможности программы, что позволяет подсвечивать ошибки стиля кодирования прямо в IDE.
Необходимо зайти в File - Settings - Inspections - PHP и поставить галку напротив PHP Code Sniffer validation. В появившемся окне указать путь до phpcs.bat и выбрать тот стиль кодирования, который хотим использовать.
После этого ваш код будет автоматически проверяться на соответствие стилю кодирования и подсвечиваться в IDE. При наведении на подчёркнутый код можно получить сообщение от Code Sniffer, в чём он видит ошибку.
Итак, инструмент для проверки стиля кодирования у нас есть. Но никто не может помешать нерадивому программисту его отключить или просто не использовать. Для того, чтобы все в команде выполняли договорённость о едином стиле кодирования, Code Sniffer можно подключить к вашей системе контроля версий с помощью хука.
В документации Code Sniffer'a подробно описано как подключить хук к системе контроля версий SVN. Хук позволит при коммите любого кода в SVN проверить его на соответствие стандартам и если они нарушены коммит не пройдёт, а будет выдан отчёт о найденных ошибках. На просторах интернета можно найти и описание хука для GIT.
Таким образом мы получили удобный инструмент для автоматического отслеживания стиля кодирования. Если у вас и вашей команды есть сомнения в необходимости этого, просто попробуйте на каком-нибудь новом проекте и я уверен, что положительный результат не заставит долго ждать.