Code sniffer

Снова копирую собственную статью из вики в бложек. Половина авторства принадлежит Сергею Бухарову.

Code sniffer — инструмент для инспекции кода на соответствие стандартам. Существует огромное количество стандартов кодирования на PHP. В нашей команде, например, используется стандарт Zend для кода, и стандарт PEAR для док-блоков. Это пояснение важно, поскольку к статье приложен файл с именно этим шаблоном проверки.

Что такое:
Комплекс инструментов, позволяющий держать код в рамках стандарта.
Основной этих инструментов является Code Sniffer — консольная утилита, проверяющяя соотвествие стандарту файлы на PHP, JavaScript и CSS. Это важный инструмент для развитя и поддержания кода в чистоте

Инсталяция

Инсталяция Code Sniffer:

pear install PHP_CodeSniffer

у Code Sniffer’a кодировка по умолчанию iso-8859-1, поэтому кириллицу в уникоде символ считает за 2. Чтобы этого не было, нужно поставить кодировку по умолчанию utf-8:

sudo phpcs --config-set encoding utf-8

Установка стандарта кода TRS
создать папку «TRS» в /usr/share/php/PHP/CodeSniffer/Standards.
Скопировать туда файл ruleset.xml

Использование:

phpcs --standard=TRS trunk/library/SOA/Contract

Интеграция CodeSniffer и PHPStorm

Как интегриовать:
1) File -> Settings
2) Editor -> External tools
3) Add
4) в форме указать:
Имя: <любое понятное тебе>
Program: phpcs
Parametrs: report=emacs standard=TRS $FilePath$
Добавить Output Filter: $FILE_PATH$:$LINE$:$COLUMN$

Что получится в итоге:
Запуск CodeSniffer горячей клавишей из Шторма
Вывод результата в интерфей шторма
Все ошибки будут паривязаны к строкам кода, возможен быстрый переход на проблемное место

Использование:
После правки любого файла необходимо пройтись по нему CodeSniffer’ом для выявления не соотвествующему стандарту кода.
Для этого в контекстном меню появится пункт с именем, которое было задано при интеграции с PHPStorm’ом

Результат будет примерно следующий:

Строки кликабельны.
После фикса всех предупреждений можно комитить изменения в репозиторий. Делать это можно при помощи любого инструмента.

Реформат кода в PHP Storm


PhpStorm для реформатирования кода можно использовать команду Code/Reformat Code..., которая делает отступы/выравнивания/итд для php-скриптов. Можно просто импортировать настройки (settings.jar) моего phpStorm, много ручной работы будет делать за вас он сам.

Использование:
Открываем в Шторме нужный файл, в контекстном меню появится дополнтельный пункт с именем, указаном выше.

CodeSniffer and git hooks


Положить в папку opencity/.git/hooks/ файлы pre-commit, pre-commit-phpcs, pre-commit-debug-output и asker c правами 0755 из архива http://redmine.trs.io/attachments/4453/pre-commit.zip
Пример (предварительно необходимо скачать pre-commit.zip):

cd /var/www/opencity/.git/hooks
cp <ваш путь к pre-commit.zip> pre-commit.zip
unzip pre_commit.zip
chmod 0755 pre-commit pre-commit-phpcs pre-commit-debug-output
rm pre_comment.zip
pre-commit — скрипт хука
pre-commit-phpcs — скрипт проверяющий на соответствие стандартам кодирования
pre-commit-debug-output — проверяет наличие функций для отладочного вывода (var_dump, var_export, etc)
asker — программа запроса действия

На этом установка завершена.

Теперь при попытке закомитить файлы расширения php и phtml они будут пропущены через codeSniffer стандарта TRS
Коммит завершится успешно в случае соответствия стандарту.
В случае не соотвесвия стандарту будут выданы ошибки, похожие на эти

Игнорирование не стандартизованого кода
Бывают ситуации, когда изменение кода, не проходщего валидацию codeSniffer’ом не целесообразно. Например, вы включили в проект чужую библиотеку и никогда в жизни никто не полезет в ее исходники, тогда можно воспользоваться конструкцией:

<?php
много кода
// @codingStandardsIgnoreStart
здесь тоже много кода, но он не будет проверен
// @codingStandardsIgnoreEnd
дальше много кода

В этом случае код, находящийся между

@codingStandardsIgnoreStart

и

@codingStandardsIgnoreEnd

не будет проверен. Но в этом случае надо создать шапку файла и в ней подробно описать почему именно так сделано.

4 комментария
Николай

Добрые день )
хотел с вами связатся — не нащел контактов

я руководитель отдела разработки в одном интересном стартапе и нам нужем хороший серверный php-програмист

возможно как трудоустройство так и проектная работа — 79377710117 наберите если интересно

vital

было бы круто выложить файлы из архива на github

ololo

pre-commit.zip потерялся

ололо трололо

pre-commit.zip потерялся

Популярное