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.