Nette Coding Standard
Coding Standard автоматически форматирует ваш PHP-код по стандарту кодирования Nette: от отступов и скобок до пробелов и порядка импортов.
Под капотом он сочетает два общепринятых инструмента, PHP CS Fixer и PHP CodeSniffer, которые идут уже настроенными, так что настраивать что-либо самому не нужно.
Установка
Установите инструмент глобально через Composer:
composer global require nette/coding-standard
и убедитесь, что глобальный каталог с бинарниками vendor находится в переменной окружения $PATH.
Использование
У инструмента две команды. Команда check только сообщает о
нарушениях, а fix исправляет их автоматически:
ecs check
ecs fix
Без аргументов он просматривает каталоги src/ и tests/;
можно передать и один или несколько собственных путей, например
ecs check app bin.
Прежде чем запускать исправление в первый раз, обязательно сделайте резервную копию файлов.
Версия PHP
Инструмент поддерживает PHP от 8.0 до 8.5 и применяет правила
постепенно, в зависимости от версии. Версию он определяет
автоматически из composer.json вашего проекта, но её можно задать и
явно параметром --preset:
ecs check --preset php81
Собственные правила
Правила можно подстроить под свой проект. Чтобы изменить правила PHP CS
Fixer, создайте в корне проекта файл ncs.php:
<?php
return [
'strict_comparison' => false,
];
Чтобы изменить правила PHP CodeSniffer, создайте файл ncs.xml. Ссылаться
на пресет версии в нём не нужно (он подмешивается автоматически), а
через $presets/ можно подтянуть любой встроенный пресет:
<?xml version="1.0"?>
<ruleset name="MyProject">
<!-- включаем импорты use function/const -->
<rule ref="$presets/optimize-fn.xml"/>
<!-- отключаем правило -->
<exclude name="SlevomatCodingStandard.TypeHints.ReturnTypeHint"/>
</ruleset>
Оба файла находятся автоматически, и ваши правила имеют приоритет
над пресетом. Для разового переопределения, которое вы не хотите
коммитить, передайте дополнительный файл через --config-file
(.php для fixer, .xml для sniffer).
Непрерывная интеграция
В конвейере CI установите инструмент как проект и запускайте его оттуда:
- run: composer create-project nette/coding-standard temp/coding-standard
- run: php temp/coding-standard/ecs check