Nette Documentation Preview

syntax
Z PHP CS Fixeru
***************

.[perex]
.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 |migration]: 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
===================

```shell
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 |configuration#Cesty].
- **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 |suppressing].
- **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 |custom-rule] je na odpoledne, a kdo má vlastní fixer, přepíše ho podle [samostatné stránky |porting-rules].

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.