Začínáme s DressCode
Za pět minut máte nástroj nainstalovaný, projekt zkontrolovaný a většinu nálezů opravenou. Projdeme
instalaci, příkazy check a fix, volbu stylu podle PER Coding Style 3.1 nebo Nette a konfigurační soubor, který pak stačí
commitnout.
Instalace
DressCode je nástroj, ne knihovna, takže nejlepší je nainstalovat ho mimo projekt, který kontroluje. Nejjednodušší je globální instalace:
composer global require dresscode/dresscode
Adresář s globálními binárkami Composeru přidejte do proměnné
PATH a příkaz dresscode je pak k dispozici odkudkoli.
Do průběžné integrace, kde chcete verzi nástroje přibít na konkrétní číslo, se hodí instalace jako samostatný projekt:
composer create-project dresscode/dresscode temp/dresscode
temp/dresscode/bin/dresscode check src
A do třetice: DressCode lze přidat i jako vývojovou závislost projektu
(composer require --dev dresscode/dresscode) a spouštět z vendor/bin/dresscode. Funguje to, ale
platíte za to tím, že se závislosti nástroje mísí se závislostmi projektu. Sám DressCode vyžaduje PHP 8.4 nebo
novější, takže by na 8.4 musel běžet i váš projekt, i kdyby mu jinak stačilo starší PHP.
To je totiž věc, která se plete nejčastěji: verze PHP, na které běží nástroj, a verze PHP, pro kterou je psaný
váš kód, jsou dvě různá čísla. Když je DressCode nainstalovaný mimo projekt, může běžet třeba na PHP 8.5 a
přitom kontrolovat kód psaný pro PHP 8.1. Cílovou verzi si přečte z composer.json vašeho projektu a pravidla
se jí řídí, takže vám do kódu nikdy nenapíše syntaxi, kterou by projekt neuměl přeložit.
Víc DressCode nepotřebuje: parser a strom, na kterých stojí, jsou samostatná knihovna PhpSyntax bez jediné závislosti, k tomu čtyři malé balíčky z Nette a parser phpDocu od PHPStanu. Žádný framework.
Kontrola kódu
Řekněte DressCode, kam se má podívat:
dresscode check src tests
Bez další konfigurace platí preset dresscode/per, tedy PER
Coding Style 3.1, nástupce PSR-12. Jiný styl vyberete přepínačem --preset, ať už jednorázově, nebo než
si založíte konfigurační soubor:
dresscode check src --preset dresscode/nette
Výstup vypadá takhle:
DRESS|CODE 1.0 Config none, preset dresscode/per Target PHP 8.2 from composer.json Checking 214 files in /var/www/shop src/Cart.php error 8:12 A line break before the opening brace braces-position error 9:25 An array must be written with the short syntax short-array-syntax error 10:21 No whitespace after the opening parenthesis parentheses-spacing error 11:11 At least one space before the == operator binary-operator-spacing error 11:19 The body of a control structure must be enclosed in braces control-structure-braces FOUND 36 violations, 36 of them fixable in 12 files
Každý řádek říká, kde problém je (řádek a sloupec), co je špatně (zpráva popisuje, jak má kód vypadat) a které pravidlo to hlásí. Jméno pravidla vpravo je to, s čím se dá dál pracovat: najít ho v přehledu pravidel, nastavit nebo vypnout anebo potlačit na jednom místě.
Hlavička nahoře odpovídá na dvě otázky, které jinak stojí za polovinou nedorozumění: podle čeho se kontroluje (konfigurační soubor a presety) a pro jakou verzi PHP.
Exit kódy jsou tři a stojí za zapamatování, protože na nich stojí kontrola v průběžné integraci:
| kód | význam |
|---|---|
0 |
čisto |
1 |
nalezená porušení, nebo soubor, který nejde parsovat |
2 |
selhání nástroje: špatná konfigurace, neznámé pravidlo, chyba za běhu |
Automatická oprava
Většinu nálezů opraví DressCode sám. Před prvním během si soubory commitněte nebo aspoň mějte čistý pracovní strom, ať v diffu vidíte přesně to, co nástroj změnil:
dresscode fix src tests
src/Cart.php fixed 8:12 A line break before the opening brace braces-position fixed 9:25 An array must be written with the short syntax short-array-syntax ... FIXED 36 violations fixed in 12 files
Co opravit nejde (třeba příliš dlouhý řádek), zůstane ve výpisu jako error a exit kód bude
1; jinak 0. Kdo chce opravy napřed vidět, pustí dresscode check --diff: ukáže, co by
fix změnil, a nic nezapíše.
Opravu udělejte jako samostatný commit bez jiných změn. Je to jeden z těch commitů, které nikdo nečte řádek po
řádku, a přesně tak má vypadat: git blame pak vede na něj a ne na váš další commit se skutečnou změnou.
Na velkém projektu, kde by byl takový commit neúnosný, je druhá cesta: baseline zapíše dnešní stav a hlásí jen nová
porušení.
Druhé spuštění je rychlejší než první: DressCode si pamatuje obsah souborů, které prošly čistě, a pokud se nezměnil ani obsah, ani konfigurace, nezpracovává je znovu.
Konfigurace v NEONu
Aby nebylo nutné pokaždé vypisovat cesty a preset, založte v kořeni projektu soubor dresscode.neon:
presets:
- dresscode/nette
paths:
- src
- tests
Je to NEON, tedy formát, který znáte z konfigurace PHPStanu, a klíče jsou
schválně podobné: paths, excludePaths, phpVersion. Kdo má radši PHP, napíše totéž
do dresscode.php jako volání nad objektem Config; oba zápisy umějí totéž, jen anonymní funkce se
do NEONu nevejdou.
Od téhle chvíle stačí dresscode check. Do téhož souboru přijdou i jednotlivá pravidla s volbami a
výjimky pro cesty; všechno popisuje stránka Konfigurace.
Kam dál
- Jak DressCode funguje, pokud chcete rozumět tomu, proč se nástroj chová, jak se chová.
- Přechod na DressCode, pokud dnes používáte PHP CS Fixer, PHP_CodeSniffer nebo Slevomat.
- Editory a IDE, aby se porušení ukazovala rovnou při psaní a ne až v terminálu.
- Průběžná integrace, aby styl hlídal i server.