Автоматическая валидации кода на соответствие стандартам (Yii2) через PHP_CodeSniffer
Стандарты кодирования - это не просто перфикционизм. Их соблюдение помогает превращает ваш код в удобочитаемый, привносит упорядоченность туда, где еще недавно царил хаос, а это в свою очередь облегчает понимание кода и местами избавляет от ошибок. Тестирование, конечно, это не заменит, но привнесет ясности в ваш код. Об этом и поговорим...
Первое, что потребуется для валидации код-стайла - установка PHP_CodeSniffer. Существует несколько вариантов его установки:
- скачать phar-файл
- установить через pear
- установить через composer
Здесь рассмотрю вариант установки пакета через композер, а так как он будет требоваться в разых проектах, то логичнее всего сделать его глобальным. Для начала установим глобально пакет yiisoft/yii2-coding-standards
. Это пакет со стандартами Yii framework 2. В зависимостях он содержит сам сниффер squizlabs/php_codesniffer
.
composer global require yiisoft/yii2-coding-standards "~2.0.0"
Теперь проверку кода можно осуществить командой
~/.composer/vendor/squizlabs/php_codesniffer/scripts/phpcs --extensions=php --standard=~/.composer/vendor/yiisoft/yii2-coding-standards/Yii2/ path/to/project/sources
А для автоматического рефакторинга можно просто выполнить
~/.composer/vendor/squizlabs/php_codesniffer/scripts/phpcbf --extensions=php --standard=~/.composer/vendor/yiisoft/yii2-coding-standards/Yii2/ path/to/project/sources
В данном случае советую сначала зафиксировать все изменения в систему контроля версии, а после рефакторинга прогнать тесты (если таковые есть) или проверить данные вручную и если все хорошо, то слить данные вместе с помощью git commit --amend -a
.
Для себя создал файл refactorer.sh, который кладу в директорию с исходным кодом и запускаю. Ниже представлено содержимое файла.
#!/usr/bin/env sh ~/.composer/vendor/squizlabs/php_codesniffer/scripts/phpcbf --extensions=php --standard=~/.composer/vendor/yiisoft/yii2-coding-standards/Yii2/ ./
Но самый удобный способ проверки и рефакторинга кода не через выполнение команд, а через IDE.
Про настройку PhpStorm я расскажу совсем скоро в другой заметке.
На этом все.