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