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

Používání

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