Nette Coding Standard
*********************
.[perex]
[Coding Standard |https://github.com/nette/coding-standard] автоматически форматирует ваш PHP-код по [стандарту кодирования Nette |contributing:coding-standard]: от отступов и скобок до пробелов и порядка импортов.
Под капотом он сочетает два общепринятых инструмента, PHP CS Fixer и PHP CodeSniffer, которые идут уже настроенными, так что настраивать что-либо самому не нужно.
Установка
=========
Установите инструмент глобально через Composer:
```shell
composer global require nette/coding-standard
```
и убедитесь, что глобальный каталог с бинарниками vendor находится [в переменной окружения `$PATH`|https://getcomposer.org/doc/03-cli.md#global].
Использование
=============
У инструмента две команды. Команда `check` только сообщает о нарушениях, а `fix` исправляет их автоматически:
```shell
ecs check
ecs fix
```
Без аргументов он просматривает каталоги `src/` и `tests/`; можно передать и один или несколько собственных путей, например `ecs check app bin`.
Прежде чем запускать исправление в первый раз, обязательно сделайте резервную копию файлов.
Версия PHP
==========
Инструмент поддерживает PHP от 8.0 до 8.5 и применяет правила постепенно, в зависимости от версии. Версию он определяет автоматически из `composer.json` вашего проекта, но её можно задать и явно параметром `--preset`:
```shell
ecs check --preset php81
```
Собственные правила
===================
Правила можно подстроить под свой проект. Чтобы изменить правила PHP CS Fixer, создайте в корне проекта файл `ncs.php`:
```php
<?php
return [
'strict_comparison' => false,
];
```
Чтобы изменить правила PHP CodeSniffer, создайте файл `ncs.xml`. Ссылаться на пресет версии в нём не нужно (он подмешивается автоматически), а через `$presets/` можно подтянуть любой встроенный пресет:
```xml
<?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 установите инструмент как проект и запускайте его оттуда:
```yaml
- run: composer create-project nette/coding-standard temp/coding-standard
- run: php temp/coding-standard/ecs check
```
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