Nette Coding Standard

Coding Standard automaticky naformátuje váš PHP kód podle Nette coding standardu, od odsazení a závorek až po mezery a řazení importů.

Pod kapotou kombinuje dva osvědčené nástroje, PHP CS Fixer a PHP CodeSniffer, které jsou už přednastavené, takže si nemusíte nic sami konfigurovat.

Instalace

Nástroj nainstalujte globálně pomocí Composeru:

composer global require nette/coding-standard

a ujistěte se, že váš globální adresář vendor/bin je v proměnné prostředí $PATH.

Použití

Nástroj nabízí dva příkazy. Příkaz check jen vypíše prohřešky, zatímco fix je rovnou opraví:

ecs check
ecs fix

Bez uvedení cest prohledá adresáře src/ a tests/; můžete ale zadat i jednu nebo více vlastních cest, například ecs check app bin.

Než nástroj poprvé spustíte v režimu oprav, určitě si soubory zazálohujte.

Verze PHP

Nástroj podporuje PHP 8.0 až 8.5 a pravidla uplatňuje přírůstkově podle verze. Verzi rozpozná automaticky z composer.json vašeho projektu, můžete ji ale nastavit i ručně volbou --preset:

ecs check --preset php81

Vlastní pravidla

Pravidla si můžete pro svůj projekt upravit. Pro změnu pravidel PHP CS Fixeru vytvořte v kořeni projektu soubor ncs.php:

<?php
return [
	'strict_comparison' => false,
];

Pro změnu pravidel PHP CodeSnifferu vytvořte soubor ncs.xml. Nemusí odkazovat na verzový preset (ten se přidá automaticky) a pomocí $presets/ můžete zapojit kterýkoliv z dodávaných presetů:

<?xml version="1.0"?>
<ruleset name="MyProject">
	<!-- zapnutí importů use function/const -->
	<rule ref="$presets/optimize-fn.xml"/>

	<!-- vypnutí pravidla -->
	<exclude name="SlevomatCodingStandard.TypeHints.ReturnTypeHint"/>
</ruleset>

Oba soubory se načtou automaticky a vaše pravidla mají přednost před presetem. Pro jednorázovou úpravu, kterou nechcete commitovat, předáte další soubor volbou --config-file (.php pro fixer, .xml pro sniffer).

Continuous integration

V CI nástroj nainstalujte jako projekt a spusťte ho odtud:

- run: composer create-project nette/coding-standard temp/coding-standard
- run: php temp/coding-standard/ecs check