Z PHP CS Fixeru
.php-cs-fixer.dist.php na dresscode.php, sady @PSR12 a @PER-CS na presety, co odpovídá čemu a která risky pravidla tady risky nejsou.
Před začátkem
Projděte si společný postup: kód a komentáře můžete nechat,
jak jsou, konfiguraci přeloží import, komentáře přepíše migrate-suppressions. Tahle stránka
doplňuje, co je u PHP CS Fixeru zvláštní.
Nejdůležitější věc dopředu: konfigurace PHP CS Fixeru je PHP soubor, který se musí spustit, a vrací objekt
jeho knihovny. dresscode import ho proto přečte jen v projektu, kde je friendsofphp/php-cs-fixer
ještě nainstalovaný. Překládejte, dokud tam je; odebrat ho můžete potom.
Překlad konfigurace
vendor/bin/dresscode import .php-cs-fixer.dist.php > dresscode.php
Sady se překládají na presety: @PSR1, @PSR2 a @PSR12 na dresscode/psr12,
@PER, @PER-CS a jejich číslované verze na dresscode/per. Sady bez protějšku, hlavně
@Symfony a @PhpCsFixer, import ohlásí; v takovém případě začněte od
dresscode/per a doplňte pravidla, na kterých vám záleží. Sady :risky protějšek nemají, protože
rozdělení na risky a bezpečná tu neexistuje (níže).
Jednotlivé fixery se překládají jménem i s volbami, kde volba protějšek má: no_unused_imports je
dresscode/unused-imports, binary_operator_spaces je dresscode/binary-operator-spacing,
trailing_comma_in_multiline se svými elements je dresscode/trailing-comma s
multiLine. Fixer, který protějšek nemá, skončí ve výpisu na chybovém výstupu; z něj máte seznam toho,
o čem je potřeba rozhodnout. Vlastní fixery z balíku kubawerlos/php-cs-fixer-custom-fixers se překládají
také, pokud DressCode odpovídající pravidlo má.
Co import nepřenese, protože to v konfiguraci Fixeru není jako pravidlo:
- Finder. Cesty,
exclude()anotPath()přepište dopathsaexcludePaths; vzory jsou popsané v Konfiguraci. - Odsazení a konce řádků (
setIndent(),setLineEnding()). Preset je nastaví za vás; pokud žádný nepoužíváte, doplňtestyle. setRiskyAllowed()nemá protějšek a není potřeba.
Risky pravidla
PHP CS Fixer označuje jako risky pravidlo, které nad polem tokenů nedokáže rozlišit bezpečný případ od
nebezpečného, a nechává rozhodnutí na vás. Typický příklad je ternary_to_elvis_operator: nepozná, jestli
podmínka ternáru je proměnná nebo volání funkce s vedlejším účinkem, tak hlídá jen ++ a --
a zbytek je váš problém.
V DressCode tohle rozdělení není, protože strom otázku zodpoví: dresscode/short-ternary-operator zkrátí
ternár jen tehdy, když je podmínku bezpečné vyhodnotit dvakrát, a volání funkce nechá být. Totéž platí pro další
pravidla, která byla risky z téhož důvodu.
Něco jiného jsou pravidla, která mění chování programu ze své podstaty: strict_comparison dělá z
== === a to není otázka syntaxe, ale významu. dresscode/strict-comparison dělá totéž
a je na vás, jestli ho zapnete; jen se o tom nedozvíte ze značky risky, ale z popisu pravidla.
Příkazy
| PHP CS Fixer | DressCode |
|---|---|
php-cs-fixer fix --dry-run |
dresscode check |
php-cs-fixer fix --dry-run --diff |
dresscode check --diff |
php-cs-fixer fix |
dresscode fix |
php-cs-fixer fix --config=soubor |
dresscode fix --config soubor |
php-cs-fixer fix --rules=jméno |
dresscode fix --rule jméno=on (přidá pravidlo k presetu, nenahrazuje jím celou sadu) |
php-cs-fixer fix --format=checkstyle |
dresscode check -f checkstyle |
php-cs-fixer fix --allow-risky=yes |
nic, viz výše |
.php-cs-fixer.cache |
cache je zapnutá sama; --no-cache ji obejde |
Exit kód PHP CS Fixeru je bitová maska (8 znamená nalezená porušení, 16 chybu konfigurace a tak dále); DressCode
vrací 0 pro čisto, 1 pro porušení a 2 pro selhání nástroje. Skript v CI, který
vyhodnocoval masku, potřebuje jednu úpravu.
Co v PHP CS Fixeru nebylo
- Potlačení na řádku. PHP CS Fixer neumí vypnout pravidlo pro jeden řádek nebo blok, jen pro celý soubor přes
Finder. V DressCode je
// dresscode:ignore jméno,dresscode:disableadresscode:enable; viz Potlačení a baseline. - Pravidlo jen pro některé cesty je
excludeRulePathsv konfiguraci, bez druhého konfiguračního souboru. - Vlastní pravidlo píšete proti stromu, ne proti tokenům; návod je na odpoledne, a kdo má vlastní fixer, přepíše ho podle samostatné stránky.