DressCode
DressCode hlídá styl vašeho PHP kódu, většinu nálezů rovnou opraví a kód umí i aktualizovat: přepíše ho na novější PHP, od PHP 8.0 až po PHP 8.6, i na nové verze knihoven. Pracuje nad bezztrátovým syntaktickým stromem, takže změní jen to, na co sáhne, a zbytek souboru zůstane bajt po bajtu stejný. Vlastní názor na styl nemá, řídí se presetem: PER Coding Style 3.1, PSR-12 nebo Nette Coding Standard. Preset si přitom přizpůsobíte do posledního detailu, a to klidně pro každou část projektu jinak.
Léta jsem používal PHP CS Fixer i PHP_CodeSniffer a bral je jako hotovou věc. Pak jsem potřeboval jedno nové pravidlo a zjistil, kolik práce dá napsat ho, když nástroj vidí jen ploché pole tokenů a strukturu kódu si musí domýšlet. DressCode vznikl proto, aby se pravidlo dalo napsat za odpoledne a aby se dalo věřit tomu, co opraví.
Nejen styl, ale i aktualizace kódu
Nástroj, který kódu rozumí, se nemusí zastavit u mezer. Když zvednete verzi PHP v composer.json, pravidla
skupiny modernization přepíšou kód na to, co nová verze přinesla, a DressCode ho v témž běhu zformátuje
podle vašeho standardu:
return trim(strtolower(strip_tags($title)));
return $title |> strip_tags(...) |> strtolower(...) |> trim(...);
Stejně převede kód při aktualizaci knihoven: pro Nette nese balíček nette/dresscode-rules migrace všech
knihoven za posledních osm let, od Nette 2.4 po současné verze. A když máte v projektu PHPStan, DressCode se ho ptá na
typy, takže přepíše i zastaralé API podle toho, čím proměnná opravdu je. Styl i přechod na novou verzi tak obstará
jeden nástroj s jednou konfigurací a jedním diffem.
Šest skupin místo stovek pravidel
Nástroj na styl kódu má dnes stovky pravidel a DressCode není výjimka: jen vestavěných je jich skoro dvě stě. Prohlížet si je jedno po druhém ale nemusíte, protože konfigurace stojí na dvou otázkách, na které umíte odpovědět rovnou.
Jak má kód vypadat? To je standard, jeden, a vyberete ho jménem: PER Coding Style 3.1, PSR-12, Nette nebo Symfony.
Co po kódu chcete kromě vzhledu? To jsou skupiny
pravidel a je jich právě šest: cleanup, modernization, types,
deprecations, correctness a optimized-calls. Šest jmen, která se naučíte za minutu.
presets:
- dresscode/per
groups:
- cleanup
- modernization
Skupina se ptá na záměr, ne na výčet. Místo dvaceti řádků se jmény pravidel napíšete „chci uklidit, co je v kódu pro nic“, a běží každé pravidlo, které to dělá. Katalog poroste, seznam jmen ne: jména skupin jsou uzavřený výčet, který nerozšíří ani balíček s vlastními pravidly. Jeho pravidlo se do některé z těch šesti skupin zařadí samo a projektu, který ji zapnul, začne pracovat bez jediného řádku navíc.
Skupina taky nikdy nerozbije konfiguraci: pravidlo, které v projektu běžet nemůže, protože cílí na novější PHP nebo chce typy, z ní tiše vypadne. Poslední slovo má přitom pořád projekt, protože cokoli ze skupiny vypnete jménem.
Kudy dál
- Začínáme s DressCode instalace, první kontrola a první oprava.
- Přechod na novější PHP jak DressCode přepíše kód od PHP 8.0 po PHP 8.6.
- Aktualizace knihoven migrace Nette a dalších knihoven v jednom běhu.
- Přechod na DressCode pokud dnes používáte PHP CS Fixer, PHP_CodeSniffer nebo Slevomat.
- Jak napsat vlastní pravidlo pokud vám v katalogu něco chybí.
Používání
- Jak DressCode funguje strom místo tokenů, standardy a skupiny pravidel, průchody a slovníček pojmů.
- Typy z PHPStanu co DressCode dokáže, když se může ptát PHPStanu na typy vašeho kódu.
- Konfigurace soubor v NEONu nebo v PHP, standard, skupiny pravidel, volby, cesty a pro každou část projektu klidně jiný profil.
- Funkce a konstanty ve jmenných prostorech proč je
strlen()ve jmenném prostoru dvojznačné a jak tu nejistotu DressCode odstraní. - Optimalizace funkcí a konstant jaké zkratky PHP u volání funkcí a u konstant bere, co je vypne a jak kód zapsat, aby platily.
- Potlačení pravidel a baseline výjimky na řádku, v souboru a pro cestu, a baseline pro pravidla, která kód zatím nesplňuje.
- Příkazová řádka příkazy, přepínače, formáty výstupu, exit kódy.
Reference
- Přehled pravidel všechna vestavěná pravidla s příklady a volbami.
- Presety co přesně zapíná PER, PSR-12, Nette a Symfony a které skupiny pravidel nesou.
Rozšíření a integrace
- Rozšiřování DressCode, pravidlo do detailu, pravidla pro bílé znaky, testování pravidel.
- Editory a IDE, průběžná integrace, Git hooky a agenti.
- PhpSyntax bezztrátový syntaktický strom, na kterém DressCode stojí, jako samostatná knihovna.