Přechod z PHP_CodeSniffer a Slevomatu
Převod phpcs.xml na konfiguraci DressCode, příkazy phpcs a phpcbf
nahrazené příkazy check a fix, jiné exit kódy a přehled toho, co odpovídá čemu.
Než začnete
Projděte si společný postup: kód a komentáře můžete nechat, jak jsou,
konfiguraci převede import a 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 ho import
přečte i tehdy, když už jsou PHP_CodeSniffer i Slevomat odinstalované.
Převod konfigurace
dresscode import phpcs.xml > dresscode.php
Sady PSR1, PSR2 a PSR12 se překládají na preset dresscode/psr12.
Jednotlivé sniffy (pravidla PHP_CodeSniffer) se překládají jménem, a kde má vlastnost z <properties>
protějšek, tak i s ní: Generic.Files.LineLength je dresscode/line-length a jeho
absoluteLineLimit se stane klíčem lineLength,
SlevomatCodingStandard.Namespaces.UnusedUses je dresscode/unused-imports,
Squiz.WhiteSpace.OperatorSpacing je dresscode/binary-operator-spacing. Délka řádku je v DressCode
jedna pro všechna pravidla, takže ji nastaví i SlevomatCodingStandard.Files.LineLength a o jedna menší než
minLineLength také RequireMultiLineMethodSignature a RequireMultiLineCondition ze
Slevomatu; když se hodnoty liší, import nechá nejmenší a upozorní na to.
Vyloučení sniffu uvnitř sady (<exclude name="…"/>) import přenese jako vypnutí pravidla,
které sniffu odpovídá. Když ale odpovídající pravidlo DressCode pokrývá i jiný sniff, import ho nechá
zapnuté a vypíše varování; stejně tak u vyloučení jedné zprávy sniffu
(Generic.PHP.ForbiddenFunctions.Found), protože na jednu zprávu se pravidlo zúžit nedá. Umlčení přes
<severity>0</severity> import nepřenáší; takové pravidlo vypněte v klíči
rules hodnotou keep. Sniff bez protějšku skončí ve výpisu na chybovém výstupu; typicky jde
o sniffy o dokumentačních komentářích z balíku Squiz.Commenting a o sniffy, které hlídají totéž co
jiný sniff, jen jinými slovy.
Co v phpcs.xml není pravidlo a přepíšete to ručně:
<file>a<exclude-pattern>do klíčůpathsaexcludePaths; vzory popisuje Konfigurace.<exclude-pattern>uvnitř<rule>patří do přepisu, který pravidlu pro ty cesty dá hodnotukeep. Na obojíimportupozorní.<arg name="extensions">do klíčefileExtensions.<config name="php_version">není potřeba, cílovou verzi si DressCode přečte zcomposer.json.<arg name="tab-width">a odsazení řeší preset, nebo klíčstyle.
Slevomat: jeho sniffy, které DressCode pokrývá, se přeloží jménem jako každé jiné. Jeho pomocné třídy ani
nastavení installed_paths tu 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 na terminálu ukazuje sám |
.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 porušení po opravě zbude, řekne shrnutí check a formát json. Skript, který exit kód
vyhodnocuje, potřebuje jednu úpravu.
Co je jinak
- Jeden nástroj na kontrolu i opravu.
phpcsaphpcbfbyly dva příkazy, které se občas neshodly, protože oprava mohla odhalit další porušení. Tady jefixtotéž cocheckplus zápis, a cofixneopraví, ohlásí stejně jakocheck. - Priority sniffů neexistují, pravidla běží opakovaně do ustálení; proč.
- Komentáře
phpcs:ignore,phpcs:disable,phpcs:enable,phpcs:ignoreFilea@phpcsSuppressfungují dál, a to i se jmény sniffů. Přepis nadresscode:*je jeden příkaz a je dobrovolný. - Baseline je vestavěná. U PHP_CodeSniffer se o ní léta diskutuje a řeší se doplňky třetích stran. Tady ji
zapíše
check --generate-baselinea obsahuje jen to, cofixopravit neumí, takže opravám nepřekáží; viz Baseline. - Vlastní sniff se nepřenáší, ale přepisuje; nad stromem z něj obvykle zbude zlomek délky. Návod je na samostatné stránce.