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

PHP_CodeSniffer - это инструмент для проверки кода на соответствие принятым соглашениям и (в некоторых случаях) автоматического его исправления после проверки.

Установка и запуск

В самом простом случае можно выполнить такой код в папке с исходниками проекта:

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar
$ php phpcs.phar -h

$ curl -OL https://squizlabs.github.io/PHP_CodeSniffer/phpcbf.phar
$ php phpcbf.phar -h

Так же поддерживается установка через composer. Далее будет рассматриваться именно этот вариант.

Пропишем в composer.json следующий код:

{
    "require-dev": {
        "squizlabs/php_codesniffer": "3.*"
    }
}

После обновления composer пробуем выполнить

$ ./vendor/bin/phpcs -h
$ ./vendor/bin/phpcbf -h

Первый скрипт проверяет код на соответствие стандартам и выдает отчет. Второй - исправляет, то что можно исправить автоматически.

Чтобы посмотреть перечень доступных стандартов, можно выполнить

$ ./vendor/bin/phpcs -i

Для вывода списка проверок интересующего стандарта (в данном случае PSR-2) выполняем:

$ ./vendor/bin/phpcs --standard=PSR2 -e

Проверка кода

К примеру, при кодировании мы хотим следовать стандарту PSR-2.

Выполняем в консоли:

$ ./vendor/bin/phpcs --standard=PSR2 -p ./

Данная команда проверит все файлы проекта на соответствие PSR-2. Все файлы нам не нужны, поэтому некоторые мы можем смело исключить:

$ ./vendor/bin/phpcs --standard=PSR2 -p --ignore=*/vendor/*,*/tests/*,*.css,*.js ./

В примере выше я исключил папки с тестами проекта, а так же третьесторонние модули и файлы js-скриптов и стилей css (PHP_CodeSniffer знает некоторые проверки для css и js-файлов тоже).

Если до первого запуска скрипта код никаким стандартам не соответствовал, то в логе нас ждет большая куча сообщений.

Быстро исправить некоторые простые вещи поможет выполнение следующего кода:

$ ./vendor/bin/phpcbf --standard=PSR2 -p --ignore=*/vendor/*,*/tests/*,*.css,*.js ./

Затем можно снова вызвать phpcs и доправить остальные замечания вручную.

Что дальше?

В идеале PHP_CodeSniffer должен запускаться с определенной периодичностью. Желательно перед сдачей кода в master-ветку проекта. Оставим этот вопрос за пределами данной заметки.

Если в вашей компании есть свой ни на что не похожий code-style, то здесь вам поможет написание собственного набора правил в формате xml.

В данном файле можно описать какие проверки следует выполнять, с какими параметрами запускать скрипты PHP_CodeSniffer и прочее.

После написания собственного набора правил, подключить его можно просто:

$ ./vendor/bin/phpcs --standard=path_to_my_ruleset/ruleset.xml

Желаю успеха в борьбе с беспорядком в коде!