Editory a IDE: PhpStorm a VS Code

Porušení podtržená přímo v kódu, oprava jedním klikem a formátování při uložení. Co nainstalovat, co naopak vypnout a co se stane s rozepsaným kódem, který zrovna nejde přeložit.

Co integrace umí

Nástroj, který běží jen v průběžné integraci, je poloviční užitek: o porušení se dozvíte až po pushi a opravujete ho v jiném rozpoložení, než jste kód psali. Integrace do editoru umí čtyři věci a v tomhle pořadí jsou i užitečné:

  1. Formátování při uložení. Soubor se po uložení opraví tak, jak by ho opravil dresscode fix. Zdaleka nejužitečnější věc a stačí na ni i editor bez jakéhokoli rozšíření, viz níže.
  2. Podtržení porušení přímo v kódu, se zprávou a jménem pravidla v bublině.
  3. Oprava jednoho porušení z nabídky rychlých oprav, ne celého souboru najednou.
  4. Potlačení jedním klikem, které na správný řádek vloží dresscode:ignore se jménem pravidla.

Pod tím vším běží jeden jazykový server, dresscode lsp, který je součástí balíku. Díky tomu se editory chovají stejně a totéž dostane každý, kdo mluví protokolem Language Server Protocol: Neovim, Zed, Helix i Sublime Text.

Jazykový server

Server spouští plugin nebo rozšíření editoru samo; nastavovat ho musíte jen tehdy, když DressCode neleží ve vendor/bin projektu. Kdo ho zapojuje do editoru, pro který hotová integrace není, spustí:

dresscode lsp

Server komunikuje přes standardní vstup a výstup, konfiguraci projektu čte stejně jako příkazová řádka a soubory drží v paměti, takže se při každém uložení neplatí start PHP. Neuložený obsah bere z editoru, ne z disku.

PhpStorm

Nainstalujte plugin DressCode z marketplace. Po instalaci si vendor/bin/dresscode v projektu najde sám; porušení se podtrhnou jako inspekce, Alt+Enter nabídne opravu nebo potlačení a v nastavení pluginu zapnete opravu při uložení.

Zároveň vypněte vestavěné formátování PHP (Settings › Tools › Actions on Save › Reformat code), jinak se oba formátovače přetahují a soubor se při každém uložení změní dvakrát.

I bez pluginu funguje File Watcher (Settings › Tools › File Watchers): typ souboru PHP, program $ProjectFileDir$/vendor/bin/dresscode, argumenty fix $FilePath$ -f bare, pracovní adresář $ProjectFileDir$. Formát bare vypíše jen porušení, která zůstala na vás, a u přepsaného souboru řádek rewritten, takže u čistého souboru watcher mlčí.

Visual Studio Code

Nainstalujte rozšíření DressCode z marketplace. Podtrhávání funguje hned, formátování při uložení zapnete v nastavení:

{
	"editor.formatOnSave": true,
	"[php]": {
		"editor.defaultFormatter": "dresscode.dresscode"
	}
}

Jiný formátovač PHP (třeba Intelephense) přitom vypněte, nebo mu nechte jen to, co DressCode neřeší. Bez rozšíření udělá totéž rozšíření Run on Save s příkazem vendor/bin/dresscode fix ${file} -f bare.

Rozepsaný a rozbitý kód

Během psaní je soubor půl vteřiny syntakticky rozbitý. Server v takové chvíli nehlásí záplavu chyb: ukáže jedinou, syntaktickou, na místě, kde parser skončil, a podtržení z posledního platného stavu nechá být. Oprava při uložení se nad souborem, který nejde parsovat, neprovede vůbec: radši neopravený soubor než zmrzačený.

Totéž platí o každé opravě. DressCode zapíše jen výsledek, který se znovu naparsuje a vytiskne na totéž. Je to týž round trip, tedy zaručená shoda vytištěného stromu s původním souborem, na které stojí celý nástroj. V editoru je z něj pojistka, že formátování při uložení nemůže soubor rozbít.