28 апр. 2021 г.
Всем привет! Сегодня хотел бы рассказать о настройке PHP-CS-Fixer для PHP проекта. PHP-CS-Fixer используется для автоматического форматирования кода в соответствии с определенными правилами, к примеру, стандартами PSR.
С помощью PHP-CS-Fixer можно повысить качество кода. Соблюдение стандартов кодирования делает код проекта более читаемым и упрощает разработку. Кроме того, использование автоматического форматирования должно помочь упростить процесс code review.
PHP-CS-Fixer устанавливается через composer такой командой:
composer require friendsofphp/php-cs-fixer
При желании, можно установить глобально.
В корне проекта создаем файл .php_cs
. Для Symfony проектов использую такую конфигурацию:
<?php
declare(strict_types=1);
$finder = PhpCsFixer\Finder::create()
->exclude('Migrations')
->in(__DIR__ . '/src')
->in(__DIR__ . '/tests');
return PhpCsFixer\Config::create()
->setRiskyAllowed(true)
->setRules([
'@Symfony' => true,
'@PHP71Migration:risky' => true,
'concat_space' => ['spacing' => 'one'],
'psr0' => false,
'array_syntax' => ['syntax' => 'short'],
'class_definition' => ['multiLineExtendsEachSingleLine' => true],
'no_useless_else' => true,
'ordered_imports' => ['sort_algorithm' => 'alpha'],
'phpdoc_add_missing_param_annotation' => ['only_untyped' => true],
'no_short_echo_tag' => true,
'list_syntax' => ['syntax' => 'short'],
'linebreak_after_opening_tag' => true,
'void_return' => false,
'phpdoc_summary' => false,
'multiline_whitespace_before_semicolons' => ['strategy' => 'new_line_for_chained_calls'],
'visibility_required' => ['property', 'method', 'const'],
])
->setCacheFile(__DIR__ . '/.php_cs.cache')
->setFinder($finder);
Для получения информации о конкретном правиле можно использовать describe
команду:
vendor/bin/php-cs-fixer describe concat_space
В результате в консоль будет выведено подробное описание правила и всех доступных параметров.
Автоматическое форматирование кода можно запустить такой командой:
vendor/bin/php-cs-fixer fix --allow-risky=yes --using-cache=no --config .php_cs
Также можно запустить форматирование для конкретного файла или директории:
vendor/bin/php-cs-fixer fix --allow-risky=yes --using-cache=no --config .php_cs src/Command/
vendor/bin/php-cs-fixer fix --allow-risky=yes --using-cache=no --config .php_cs src/Command/MyConsoleCommand.php
Параметр --allow-risky=yes
отвечает за запуск "опасных" правил. Например, добавление strict types может сломать существующий код, поэтому считается опасным.
Параметр --using-cache=no
отключает использование кэша. Имеет смысл отключить кэш в случае, если количество кода не очень велико и запуск не занимает много времени/ресурсов,
Параметр --config .php_cs
нужен для указания файла с настойками правил.
Рекомендую добавить запуск PHP-CS-Fixer в CI/CD для постоянного запуска. Для github actions это можно сделать так:
steps:
- name: PHP-CS-Fixer
uses: docker://oskarstark/php-cs-fixer-ga
with:
args: --config=.php_cs.dist --diff --dry-run
Для более удобного локального запуска можно добавить скрипт в composer.json
. И запускать таким образом composer cs-fixer
.
{
...
"scripts": {
...
"cs-fixer": [
"vendor/bin/php-cs-fixer fix --allow-risky=yes --using-cache=no --config .php_cs"
],
...
}
...
}
Файл с настройками правил также доступен на gist.
На этом пока все. Спасибо за внимание!