Nette Documentation Preview

syntax
Z PHP_CodeSniffer a Slevomatu
*****************************

.[perex]
phpcs.xml na dresscode.php, phpcs a phpcbf na check a fix, jiné exit kódy a tabulka sniffů s jejich protějšky.


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_CodeSniffer zvláštní. A jedna dobrá zpráva rovnou: `phpcs.xml` je XML, takže `import` ho přečte bez PHP_CodeSniffer i bez Slevomatu, i když už jsou odinstalované.


Překlad konfigurace
===================

```shell
vendor/bin/dresscode import phpcs.xml > dresscode.php
```

Sady `PSR1`, `PSR2` a `PSR12` se překládají na preset `dresscode/psr12`. Sniffy se překládají jménem, i s vlastnostmi z `<properties>`, kde mají protějšek: `Generic.Files.LineLength` s `lineLimit` je `dresscode/line-length` s `limit`, `SlevomatCodingStandard.Namespaces.UnusedUses` je `dresscode/unused-imports`, `Squiz.WhiteSpace.OperatorSpacing` je `dresscode/binary-operator-spacing`. Vyloučení sniffu uvnitř sady (`<exclude name="…"/>`) a umlčení přes `<severity>0</severity>` `import` nepřenáší; takové pravidlo vypnete v `rules` hodnotou `false`. Sniff bez protějšku skončí ve výpisu na chybovém výstupu; typicky jsou to sniffy o dokumentaci z balíku `Squiz.Commenting` a sniffy, které hlídají totéž co jiný sniff jinými slovy.

Co v `phpcs.xml` není pravidlo a přepíšete to ručně:

- `<file>` a `<exclude-pattern>` do `paths` a `excludePaths`; vzory jsou popsané v [Konfiguraci |configuration#Cesty].
- `<arg name="extensions">` do `fileExtensions`.
- `<config name="php_version">` není potřeba: verze se čte z `composer.json`.
- `<arg name="tab-width">` a odsazení řeší preset nebo `style`.

Slevomat: jeho sniffy, které DressCode pokrývá, se přeloží jménem jako každé jiné; jeho pomocné třídy a nastavení `installed_paths` nic nepotřebuje.


Příkazy
=======

| PHP_CodeSniffer | DressCode |
|---|---|
| `phpcs src` | `dresscode check src` |
| `phpcbf src` | `dresscode fix src` |
| `phpcs --standard=PSR12 src` | `dresscode check --preset dresscode/psr12 src` |
| `phpcs --report=checkstyle` | `dresscode check -f checkstyle` |
| `phpcs --report=json` | `dresscode check -f json` |
| `phpcs --parallel=8` | `dresscode check --jobs 8` |
| `phpcs --cache` | cache je zapnutá sama; `--no-cache` ji obejde |
| `phpcs -p` | průběh se ukazuje sám na terminálu |
| `.phpcs.xml.dist` | `dresscode.neon.dist` |

PHP_CodeSniffer rozlišuje exit kódem, jestli jsou nalezená porušení opravitelná, a `phpcbf` má vlastní stupnici. DressCode vrací `0` pro čisto, `1` pro porušení a `2` pro selhání nástroje; kolik z porušení šlo opravit, říká shrnutí a formát `json`. Skript, který exit kód vyhodnocuje, potřebuje jednu úpravu.


Co je jinak
===========

- **Jeden nástroj pro kontrolu i opravu.** `phpcs` a `phpcbf` byly dva příkazy s občas různým výsledkem, protože oprava mohla odhalit další porušení. Tady je `fix` totéž co `check` plus zápis, a co `fix` neopraví, ohlásí stejně jako `check`.
- **Priority sniffů neexistují**; pravidla běží do ustálení, [proč |how-it-works#Průchody do ustálení místo priorit].
- **Komentáře `phpcs:ignore`, `phpcs:disable`, `phpcs:enable`, `phpcs:ignoreFile` a `@phpcsSuppress` fungují dál**, i se jmény sniffů. Přepis na `dresscode:*` je jeden příkaz a je dobrovolný.
- **Vlastní sniff** se nepřenáší, přepisuje; strom z něj obvykle udělá zlomek délky. Návod je na [samostatné stránce |porting-rules].

Z PHP_CodeSniffer a Slevomatu

phpcs.xml na dresscode.php, phpcs a phpcbf na check a fix, jiné exit kódy a tabulka sniffů s jejich protějšky.

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_CodeSniffer zvláštní. A jedna dobrá zpráva rovnou: phpcs.xml je XML, takže import ho přečte bez PHP_CodeSniffer i bez Slevomatu, i když už jsou odinstalované.

Překlad konfigurace

vendor/bin/dresscode import phpcs.xml > dresscode.php

Sady PSR1, PSR2 a PSR12 se překládají na preset dresscode/psr12. Sniffy se překládají jménem, i s vlastnostmi z <properties>, kde mají protějšek: Generic.Files.LineLength s lineLimit je dresscode/line-length s limit, SlevomatCodingStandard.Namespaces.UnusedUses je dresscode/unused-imports, Squiz.WhiteSpace.OperatorSpacing je dresscode/binary-operator-spacing. Vyloučení sniffu uvnitř sady (<exclude name="…"/>) a umlčení přes <severity>0</severity> import nepřenáší; takové pravidlo vypnete v rules hodnotou false. Sniff bez protějšku skončí ve výpisu na chybovém výstupu; typicky jsou to sniffy o dokumentaci z balíku Squiz.Commenting a sniffy, které hlídají totéž co jiný sniff jinými slovy.

Co v phpcs.xml není pravidlo a přepíšete to ručně:

  • <file> a <exclude-pattern> do paths a excludePaths; vzory jsou popsané v Konfiguraci.
  • <arg name="extensions"> do fileExtensions.
  • <config name="php_version"> není potřeba: verze se čte z composer.json.
  • <arg name="tab-width"> a odsazení řeší preset nebo style.

Slevomat: jeho sniffy, které DressCode pokrývá, se přeloží jménem jako každé jiné; jeho pomocné třídy a nastavení installed_paths nic nepotřebuje.

Příkazy

PHP_CodeSniffer DressCode
phpcs src dresscode check src
phpcbf src dresscode fix src
phpcs --standard=PSR12 src dresscode check --preset dresscode/psr12 src
phpcs --report=checkstyle dresscode check -f checkstyle
phpcs --report=json dresscode check -f json
phpcs --parallel=8 dresscode check --jobs 8
phpcs --cache cache je zapnutá sama; --no-cache ji obejde
phpcs -p průběh se ukazuje sám na terminálu
.phpcs.xml.dist dresscode.neon.dist

PHP_CodeSniffer rozlišuje exit kódem, jestli jsou nalezená porušení opravitelná, a phpcbf má vlastní stupnici. DressCode vrací 0 pro čisto, 1 pro porušení a 2 pro selhání nástroje; kolik z porušení šlo opravit, říká shrnutí a formát json. Skript, který exit kód vyhodnocuje, potřebuje jednu úpravu.

Co je jinak

  • Jeden nástroj pro kontrolu i opravu. phpcs a phpcbf byly dva příkazy s občas různým výsledkem, protože oprava mohla odhalit další porušení. Tady je fix totéž co check plus zápis, a co fix neopraví, ohlásí stejně jako check.
  • Priority sniffů neexistují; pravidla běží do ustálení, proč.
  • Komentáře phpcs:ignore, phpcs:disable, phpcs:enable, phpcs:ignoreFile a @phpcsSuppress fungují dál, i se jmény sniffů. Přepis na dresscode:* je jeden příkaz a je dobrovolný.
  • Vlastní sniff se nepřenáší, přepisuje; strom z něj obvykle udělá zlomek délky. Návod je na samostatné stránce.