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.
На этом пока все. Спасибо за внимание!