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() a notPath() přepište do paths a excludePaths; vzory jsou popsané v Konfiguraci.
  • Odsazení a konce řádků (setIndent(), setLineEnding()). Preset je nastaví za vás; pokud žádný nepoužíváte, doplňte style.
  • 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:disable a dresscode:enable; viz Potlačení a baseline.
  • Pravidlo jen pro některé cesty je excludeRulePaths v 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.
verze: 1.0