Upgrade aplikace

Aplikace přešla na novější Nette, Symfony nebo PHP a v kódu zůstalo staré API. dresscode update ho přepíše za vás: sám si vezme data o tom, co nové verze změnily, zeptá se PHPStanu na typy a na styl, který projekt nedodržuje, nesáhne.

Jak na to

composer update
dresscode update

Nic dalšího není potřeba, ani konfigurace. update vezme verze knihoven z vendoru projektu, cíl PHP z require.php v composer.json a opraví všechno, co sada deprecations o zastaralém API ví, tedy data knihoven i zastaralé věci PHP. S přepínačem --modernize navíc přepíše kód na novější konstrukce PHP (sada modernizations).

Typy bere z PHPStanu, který musí ležet vedle DressCode; bez něj update skončí chybou, protože bez typů nepozná, na čem se metoda volá. Co nová verze knihovny odstranila bez náhrady, PHPStan nevidí a zůstane ve výpisu jako práce na ruku.

Na konci výpis řekne, kolik souborů přepsal a kolik zbývá. Kde něco přepsal, poradí pustit update ještě jednou, protože přepsaný kód může nést další věc k upgradu. Náhled update nemá, změny ukáže git.

Data knihoven

Co se ve které verzi knihovny změnilo, nesou balíčky pravidel: dresscode/rules-nette pro knihovny Nette, Latte a Tracy, dresscode/rules-deegee pro Dibi a Texy. Když projekt používá knihovnu, jejíž data DressCode nemá, update je doinstaluje sám, do instalace DressCode, takže composer.json projektu zůstane, jak je:

The libraries of the project have upgrading data in `dresscode/rules-nette`, which DressCode does not have.
Install it beside DressCode in `C:/Users/me/AppData/Roaming/Composer`?

V terminálu se zeptá. Bez terminálu, v CI nebo v hooku agenta, nic neinstaluje, skončí exit kódem 3 a vypíše přesný příkaz Composeru; přepínač --yes instalaci povolí i tam. Je-li DressCode nainstalovaný v projektu (v jeho composer.lock), instaluje se do projektu jako composer require --dev a otázka řekne, že se mění composer.json projektu.

Projekt s konfigurací

Má-li projekt dresscode.neon, platí z něj, co se upgradu týká: paths a excludePaths, cíl PHP, typy, fixRisky, baseline a vlastní mapy upgrading. Ze stylu jen to, co kód dodržuje: update nejdřív zkontroluje kód podle stylu projektu a každé rozhodnutí, které kód někde porušuje, vynechá. Kód přepsaný upgradem je tak ve stylu, který v projektu opravdu platí, a soubor, na který upgrade sáhne, nezmění nic jiného.

Jednotkou je rozhodnutí a výběr platí za celý projekt: jediný dlouhý řádek kdekoli vynechá lineLength všude. Kdo chce i styl, pustí potom dresscode fix, nejlépe jako samostatný commit.