Автоматическая проверка code style PHP

Самым популярным инструментом для анализа кода PHP является Codesniffer.

Установить его можно как глобально, так и локально. Через композер выглядит это так:

Запуск через:

Настройка Codesniffer это отдельная тема, сейчас пойдет речь про авто запуск этой команды. Чтобы не запускать каждый раз перед коммитом или пушем, можно привязать запуск на git webhooks.

Все хуки лежат в папке .git\hooks. Возьмем к примеру файл pre-commit.sample, событие вызывается до коммита. Этот хук легче всего тестировать локально, так что и другие скрипты, необходимые для других хуков, можно потренировать «на кошках»

Для начала нужно переименовать или создать новый файл с именем pre-commit.

Вставить туда вот такой код

exit 0 — программа завершено успешно, коммит принят, иначе коммит отклонен.

vendor/bin/phpcs src — при ошибке вызывает код отличный от 0

Тестируем через команду:

—allow-empty — закоммитить даже если ничего не изменено

Работает успешно, вывод терминала:

Отлично, значит этот хук смогут использовать все участники проекта?

Нет, все хуки, хранимые в папке .git/hooks являются локальными. Если разработчик создал новый хук, то работать он будет только на его локальной машине. Закоммитить его он не сможет, запушить в репозиторий тоже.

Как быть, отправлять новый хук всем по почте?

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

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

  1. Создать файл bin/pre-commit в корне проекта
  2. Добавить в composer.json

Теперь при установке зависимостей через композер composer install файл с хуком скопируется в папку .git/hooks/pre-commit

 

Каждый раз phpcs проверяет все файлы, это слишком долго

Нужно проверять только измененные файлы.

git diff —name-only master — вернет измененные названия файлов по сравнению с мастером

Пример:

—diff-filter=MARC — вернет только M — modified, A — added, R -renamed, С — copied. CONTRIBUTING.md будет удален из списка, ведь анализатор не может проверить удаленные файлы.

grep .php$ — вернет только файлы с расширением .php

if -n  — if string is non-zero

примеры

Примеры можно скачать по ссылке https://github.com/Carsak/CodeAnalyzerExample

2 комментария

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *