Ahoj Matouši, zaznamenal jsem teď tvoji velkou aktivitu kolem pluginů
pro PhpStorm, které jsou blízké Nette Framework. Jak dlouho sis s vývojem
hrál, nežli jsi pustil ven první update? A možná zbytečná otázka, ale
co tě k tomu vedlo?
Poprvé jsem s tím přišel do styku asi před dvěma lety. To jsem ale jen
koukl do kódu, zhrozil jsem se, protože jsem netušil, co se tam děje a tím
to skončilo. Poté někdy minulý rok v listopadu nebo prosinci jsem si řekl,
že to takhle dál nejde, že se ty pluginy neposouvají a také jsem měl
potřebu s tím pohnout, aby mi ušetřily čas. Takže původní impulz se
týkal mých potřeb. Ale jakmile jsem to publikoval na Slacku, tak jsem dostal
hodně reakcí a uvědomil si, že to bude větší věc, než bych
čekal 😀
Tak nějak už poslední dobou tíhnu k Javě, takže mě motivuje i to,
že se v Javě zlepšuji. A abych odpověděl na otázku, je to zatím asi
4 měsíce, co se o to starám.
Výhoda také je, že s původními autory je možné v pohodě
komunikovat, a navedli mě, když jsem potřeboval.
Čtyři měsíce je dlouhá i krátká doba, záleží na úhlu pohledu.
Myslím, že motivace kladným ohlasem může fungovat jako super hnací pohon.
Jak po čtyřech měsících hodnotíš API a obecně dokumentaci k psaní
pluginů?
Ano, potěší to, když máš kladné ohlasy, ale je to spíš taková
třešnička na dortu. Kdyby mě mělo motivovat pouze toto, tak by to asi
dlouho nefungovalo.
Po čtyřech měsících se cítím jako někdo, kdo už ví alespoň něco
o vývoji pluginů pro IntelliJ platformy 😀 Stále mám ale rezervy, a to
hlavně v oblastech, které nejsou popsané v dokumentaci. O dokumentaci bych
řekl, že za posledních pár let ji posunuli a doplnili plno informací.
Základní informace tam jsou (teorie i příklady), ale některé věci tam
chybí a je pak potřeba to dohledávat v kódu jiných pluginů nebo přímo
v kódu od IntelliJ.
Na něco existují odpovědi na JetBrains fóru, ale při vyhledávání na
Google je blbé, že často navede na řešení problému z pohledu uživatele
PhpStromu a ne vývojáře pluginu.
Začalo to Latte pluginem a dnes už přispíváš i do pluginů pro
Neon, Tester a Nette. Máš k některému nějak blíže? Myšleno tak, že tě
na něm láká něco zlepšovat víc oproti ostatním?
Ano začalo to Latte pluginem, protože tam mi nejvíc chyběly reference,
tedy abych při prokliku z metody viděl, že je použitá v šabloně. Bez
toho byl refactoring vždy velké zlo, obzvlášť, když se jednalo o metody
s obecným názvem, třeba getName.
Nakonec se má snaha rozšířila i na další pluginy, například
v Testeru mi chyběly line markery a run configuration přes remote
interpretery. V Neonu zase proklik na použité třídy v konfiguračním
souboru a případně na metody použité pod klíčem setup. Tím, že jsem
měl už zkušenosti z Latte pluginu, už nebylo tak těžké upravit ty
ostatní pluginy.
Stále mě asi nejvíc láká Latte plugin, protože je to takový nejvíc
komplexní plugin, který řeší nejvíc věcí. Takže většinou vyvíjím
tam a pak aplikuji naučené zkušenosti na ostatní pluginy.
Můžeš shrnout základní hlavní body co v Latte pluginu, který
minulý týden přišel do plugin storu, uživatelé najdou?
Za nejdůležitější body vidím to, že nyní je možné pomocí nových
maker určit typy proměnných v šabloně. Díky tomu plugin ví, jaké
metody, property a konstanty je možné na dané proměnné volat. Plugin také
zvýrazní neexistující třídy, metody a další PHP elementy. A co vidím
ještě jako velmi důležitou featuru, tak je to našeptávání a completion
po našeptání. Nyní třeba doplní párový tag nebo koncovou složenou
závorku, pokud chybí. A další takovéto vychytávky, které šetří čas
při psaní. Doufám, že do budoucna se bude Latte psát skoro samo 😀
Samozřejmě úplně nejdůležitější je proklik z PHP do Latte na
místa, kde jsou použité dané PHP elementy a podpora refactoring rename.
Kvůli tomu vznikla ta má iniciativa
Tak to jsi zmínil věci které už uživatelé v pluginu najdou. Máš
už rozpracované další věci, na které bychom se mohli těšit? Takové
malé nakouknutí pod pokličku?
Ano, momentálně vychytávám Neon plugin, kde bude vylepšené
našeptávání základních klíčů spojených s Nette. Celkově budou nyní
ty klíče znát svůj typ a ten se bude také kontrolovat, například když
někde bude použitý INT i když se vyžaduje BOOL. Reference pro metody
použité pod klíčem setup: u definic služeb (ideální by to bylo
i v CompilerExtension), ale to ještě nevím, jestli bude možné. Také bych
chtěl, aby si NEON uměl tahat extensiony a z nich config schéma, aby to
našeptávání fungovalo i pro custom extensiony.
Co se týká Latte pluginu, tak jsou v plánu dvě větší novinky a to je
optional chaining a podpora array typehintů, jako třeba string[] nebo
FooClass[], aby to správně našeptávalo při použití ve foreach nebo při
ArrayAccess.
Díky moc za popis toho, co teď tvoříš a co nás čeká. Pojďme
k poslední otázce. Je teď něco, co bych já nebo někdo jiný mohl pro tebe
udělat, nějak pomoci? Řešíš finanční podporu vývoje? Nebo jak a kam
posílat nápady na vylepšení?
Teď mám v plánu všechny pracovní issues z GISTu převést normálně
do issues k jednotlivých repozitářům na GitHub. Takže nápady a co by se
hodilo klidně přidávat tam se štítkem enhancement.
Co se týká finanční podpory, tak tu uvítám. Vždycky se lépe
programuje, pokud člověka někdo podporuje 🙂 Zatím je na fóru odkaz na
PayPal a číslo účtu. Dozvěděl jsem se o možnosti podpory přes Patreon
nebo GitHub, kde je prý umožněno posílat donate pravidelně, takže to chci
nastavit. Myslím, že je větší a hlavně dlouhodobější motivace dostávat
třeba 100 Kč měsíčně než třeba 2000 jednorázově.
Případně pro firmy jsem schopný vystavit fakturu, pokud by si chtěla
dát donate do nákladů. Ve výsledku ty vylepšené pluginy šetří peníze
hlavně firmám.
Jinak pokud by to někoho hodně zajímalo a chtěl by se také zapojit do
vývoje pluginů, tak se rád podělím o zkušenosti s vývojem a můžeme
spolupracovat 🙂
Díky za rozhovor
Více
o pluginu najdete na Nette forum
Podpořit Matouše můžete na patreon.com/mesour.
Chcete-li odeslat komentář, přihlaste se