Полный цикл в digital

PHP Codesniffer

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

Установка

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

Простая установка

Установим плагин вывода информации:

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.*"
    }
}

Проверим работу лагина вывода информации:

./vendor/bin/phpcs -h

Проверим работу плагина автаматического исправления:

./vendor/bin/phpcbf -h

Применение

Посмотреть перечень доступных опций:

простая установкаphp phpcs.phar -h
установка через Composer./vendor/bin/phpcs -h
  • - установите стандартный идентификатор, а не локальные файлы и каталоги
  • -n не печатать предупреждения
  • -w печатать как предупреждения, так и ошибки
  • -l только локальный каталог, без рекурсии
  • -s отображать sniff-коды во всех отчетах
  • -a запуск в интерактивном режиме
  • -e объясняет стандарт, показывая включенные в него проверки
  • -p показывает ход выполнения
  • -q тихий режим, отключает подробный вывод
  • -m останавливает запись сообщений об ошибках
  • -v печать обработанных файлов
  • -vv вывод набора правил и токена
  • -vvv вывод информации об обработке анализа
  • -i показывать список установленных стандартов кодирования
  • -d устанавливать для параметра [key] php.ini значение [value] в [true] если значение не указано

Посмотреть перечень доступных стандартов:

простая установкаphp phpcs.phar -i
установка через Composer./vendor/bin/phpcs -i

Сначала запустим команду PHPCS со встроенным стандартом PSR-12:

простая установкаphp phpcs.phar --standard=PSR12 фаил.php
установка через Composer./vendor/bin/phpcs --standard=PSR12 app

Посмотрим на вывод, скрипт хочет исправить некоторые предупреждения вокруг конкатенации строк:

FILE: /Users/paul/code/sandbox/phpcs-part-1/app/Console/Kernel.php
----------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
----------------------------------------------------------------------
 28 | ERROR | [x] Expected at least 1 space before "."; 0 found
 28 | ERROR | [x] Expected at least 1 space after "."; 0 found
----------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Знак x означает что можно исправить предупреждения автоматически, не все предупреждения можно исправить автоматически с помощью phpcbf.

Что бы видеть полный анализ в командной строке вы можете использовать флаг -s:

простая установкаphp phpcs.phar -s --standard=PSR12 фаил.php
установка через Composer./vendor/bin/phpcs -s --standard=PSR12 фаил.php

Пример, как выглядит вывод со всеми предупреждениями:

FILE: /Users/paul/code/sandbox/phpcs-part-1/app/Console/Kernel.php
----------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 1 LINE
----------------------------------------------------------------------
 28 | ERROR | [x] Expected at least 1 space before "."; 0 found
    |       |     (PSR12.Operators.OperatorSpacing.NoSpaceBefore)
 28 | ERROR | [x] Expected at least 1 space after "."; 0 found
    |       |     (PSR12.Operators.OperatorSpacing.NoSpaceAfter)
----------------------------------------------------------------------
PHPCBF CAN FIX THE 2 MARKED SNIFF VIOLATIONS AUTOMATICALLY
----------------------------------------------------------------------

Найденное предупреждение PSR12.Operators.OperatorSpacing.NoSpaceBefore в приведённом выше примере, можно игнорировать, отключить проверку можно прям в файле app/Console/Kernel.php:

// phpcs:disable PSR12.Operators.OperatorSpacing.NoSpaceAfter
$this->load(__DIR__.'/Commands');
// phpcs:enable

Давайте автоматически исправим приведённые выше предупреждения с помощью phpcbf:

простая установкаphp phpcbf.phar -s --standard=PSR12 фаил.php
установка через Composer./vendor/bin/phpcbf -s --standard=PSR12 фаил.php
PHPCBF RESULT SUMMARY
----------------------------------------------------------------------------------------------
FILE                                                                          FIXED  REMAINING
----------------------------------------------------------------------------------------------
/Users/paul/code/sandbox/phpcs-part-1/app/Models/User.php                     1      0
/Users/paul/code/sandbox/phpcs-part-1/app/Http/Controllers/Controller.php     1      0
/Users/paul/code/sandbox/phpcs-part-1/app/Console/Kernel.php                  2      0
----------------------------------------------------------------------------------------------
A TOTAL OF 4 ERRORS WERE FIXED IN 3 FILES
----------------------------------------------------------------------------------------------

Файл конфигурации

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

Пример phpcs.xml:

phpcs.xml<?xml version="1.0"?>
    <ruleset name="Custom Coding Standards">
    <description>PHPCS Custom Ruleset Example</description>
        <!-- PSR-12 Standard -->
    <rule ref="PSR12"/>
        <!-- Color the result output -->
    <arg name="colors" />
        <!-- Show progress of the run -->
    <arg value="ps" />
        <!-- Code directory -->
    <file>src/</file>
        <!-- Ignore file and class comment errors -->
    <rule ref="Squiz.Commenting.FileComment.Missing">
        <exclude-pattern>*/src/*</exclude-pattern>
    </rule>
    <rule ref="Squiz.Commenting.ClassComment.Missing">
        <exclude-pattern>*/src/*</exclude-pattern>
    </rule>
</ruleset>

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

простая установкаphp phpcs.phar --standard=дириктория/phpcs.xml
установка через Composer./vendor/bin/phpcs --standard=дириктория/phpcs.xml
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг