editor:// link vs. Latte template file

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Patrik Votoček
Člen | 2221
+
0
-

Bylo by cool kdyby když dojde k chybě v šabloně tak aby link vedl na originální a né na zkompilovanou šablonu. Nevím jak moc dobře je technicky řešitelné aby vedl i na správný řádek ale to by bylo ještě víc cool.

redhead
Člen | 1313
+
0
-

Už se to tu někdy řešilo, jsem pro, ale myslím, že to nebude úplně jednoduché (podle toho jak ty šablony teď fungují..)

Patrik Votoček
Člen | 2221
+
0
-

myslím že otevření šablony na řádku 1 by prozatím stačilo…

David Grudl
Nette Core | 8082
+
0
-

To by udělat šlo. Jak bude čas.

phx
Člen | 651
+
0
-

Na druhou stranu, kdyz odhaduju syntax maker tak se mi hodi odkaz na vygenerovanou sablonu kde vidim co se generuje spatne. Z toho se pak uz nejak dopidim jak to mam napsat spravne.

Mikulas Dite
Člen | 756
+
0
-

Poslal jsem na to pull request. Rád bych tady zjistil, co si o tomhle řešení myslíte.

Vyřešil jsem to úpravou vyhozené výjimky. Místo obcházení pomocí reflexí jsem udělal novou výjimku MacroException, aby šla spolehlivě zachytávat později. Tohle řešení krapet čistší a průhlednější. Celá aplikace se teď chová i logicky správně – chybu takhle jako kdyby vyhazuje šablona.

Editoval Mikulas Dite (7. 11. 2010 9:08)

Aurielle
Člen | 1281
+
0
-

Pěkné, +1 :)

jansfabik
Člen | 193
+
0
-

ta myšlenka se mi líbí, ale do Nette bych to ještě nezahrnoval:

  • když mám v makru PHP kód (např. {undefinedMacro $param}), tak je označen první řádek šablony
  • tyhle chyby na úrovni Latte imho nejsou tak časté, častěji k chybě dojde až po zkompilování (třeba {foreach $var} vyvolá Parse Error, {$undefined} → Notice)
Mikulas Dite
Člen | 756
+
0
-

jansfabik napsal(a):

  • když mám v makru PHP kód (např. {undefinedMacro $param}), tak je označen první řádek šablony

Jo to byla blbost, už sem to fixnul

  • tyhle chyby na úrovni Latte imho nejsou tak časté, častěji k chybě dojde až po zkompilování (třeba {foreach $var} vyvolá Parse Error, {$undefined} → Notice)

No, to si mi to zavařil ; ). Kvůli parse error a notice jsem to ale celé přepsal do Debug.php. Ale díky, hodně jsem to kvůli tomu vylepšil.

Podpora pro chyby:

  • {$undefined} – Undefined variable '$undefined'.
  • {=undefined()} – Called undefined function 'test'.
  • {/foreach} – Unopened macro 'foreach'.
  • {foreach} – Invalid macro 'foreach'.
  • {cache} – Unclosed macro 'cache'.
  • atd.

Nový Screenshot: http://d.pr/j6e

Změnil jsem původní pull request, tak si ho prosím prohlídněte https://github.com/…tte/pull/149.

Editoval Mikulas Dite (7. 11. 2010 19:18)

Aurielle
Člen | 1281
+
0
-

Často zapomenu uzavřít if, dá se tohle taky řešit? (nebo obecně jakékoliv jiné makro)

Editoval gmvasek (7. 11. 2010 20:05)

redhead
Člen | 1313
+
0
-

A neřeší to právě to Unclosed macro 'makro'??

Editoval redhead (7. 11. 2010 20:22)

jansfabik
Člen | 193
+
0
-

nevím, co dělám špatně – dal jsem do sandboxu ten řádek {=foo()} (přesně tak, jako to je na té tvé ukázce) a dopadlo to takhle: http://ukaz.at/10a/full

grey
Člen | 94
+
0
-

já bych byl pro zobrazení obojího – jak šablony, tak překompilovaného kódu. protože jak už tu někdo poznamenal, občas dopátrávám chybu koukáním do překompilovaného kódu.

Mikulas Dite
Člen | 756
+
0
-

Neuzavřené tagy (zmiňované if) jsem už commitnul, akorát nepushnul na github.

Cachovanou verzi určitě budeme zobrazovat taky, protože prakticky není řešení jak kontrolovat custom macro. Co takhle zobrazit template, když to jde (invalid usage/unclosed/unopened/unset pro macro v distribuci), jinak se zobrazí cache (tak jako je teď, akorát s linkem na tu šablonu jak myslel Vrták původně)?

Zaseknul jsem se na tom, že parser error chyby se vyhazují v cache. To by šlo, ale jak získám cestu k originálnímu souboru, když mám jenom cestu k cachované verzi (ostatní se v shutdownHandleru získává hodně těžko)? Kdyby byla cache ve formátu module_presenter.action.phtml, tak je to v cajku, ale ta module část tam chybí.

grey
Člen | 94
+
0
-

Mikulas Dite wrote:
Co takhle zobrazit template, když to jde (invalid usage/unclosed/unopened/unset pro macro v distribuci), jinak se zobrazí cache (tak jako je teď, akorát s linkem na tu šablonu jak myslel Vrták původně)?

jo, to zní rozumně…

David Grudl
Nette Core | 8082
+
0
-

Díky za pull request!

Implementace se ale musí udělat mimo třídu Debug a dostat do ní pomocí pluginu. Šablonu má asi smysl zobrazovat jen při compile-time chybách, protože u runtime chyb nelze zjistit, na kterém řádku k chybě došlo.

Mikulas Dite
Člen | 756
+
0
-

David Grudl napsal(a):

Díky za pull request!

Implementace se ale musí udělat mimo třídu Debug a dostat do ní pomocí pluginu. Šablonu má asi smysl zobrazovat jen při compile-time chybách, protože u runtime chyb nelze zjistit, na kterém řádku k chybě došlo.

Super : ). Chápu, mimo Debug to dám, to nebude problém. Ale kam? Nejčistší by bylo na to mít zvláštní třídu v Debug/TemplateDebug.php, ale zase se mi to zdá až moc přepych na to, co to vlastně dělá. Další možnost je třeba i bluescreen, ale ten je už tak dost přeplněnej. Do /Nette/Templates se to nehodí.

Funkce se v template dynamicky nepřidávají (doufám) takže správně najde i

Line 1: {=undefined()}

Mám teda z těch runtime nechat jisté (calling undefined method) a ty nespolehlivé (zápis cyklů a unset variable) odstranit/vykreslit cache?

Editoval Mikulas Dite (8. 11. 2010 19:11)

David Grudl
Nette Core | 8082
+
0
-

Zkusil jsem do poslední revize dát implementaci přes plugin Debugu, tj. výjimku TemplateException, která implementuje IDebugPanel.

David Grudl
Nette Core | 8082
+
0
-

Mikulas Dite napsal(a):

Netuším, kam jsi s implementací směřoval ty, jsou nějaké zásadní rozdíly nebo nedostatky na současném chování via IDebugPanel?

Mikulas Dite
Člen | 756
+
0
-

@dg: Já blb si nevšimnul, že to tam už je!

Delší verze:
Pořád jsem čekal na commit, který nějak výjimku s IDebugPanel spojí s laděnkou a ono už to v Nette je. Když jsem to testoval, všimnul jsem si jenom schovaného kódu, ale neviděl jsem tu Template sekci. Bylo by nějak možné dát tuhle sekci nahoru – nad call stack (chci říct jestli snadno, bez přepisování)? Ale to už je jenom detailík.

Závěr:
Díky moc (a mimochodem tahle implementace je triviální a kupodivu přece nejlepší) : )

Edit: ještě lepší by bylo nechat tu sekci jak je, ale zavřít i call stack.

Editoval Mikulas Dite (11. 11. 2010 14:57)

Patrik Votoček
Člen | 2221
+
0
-

Nešlo by aby LatteException mělo editor:\\ link ?

David Grudl
Nette Core | 8082
+
0
-

A nemá?

Mikulas Dite
Člen | 756
+
0
-

Ale jo, má.

Patrik Votoček
Člen | 2221
+
0
-

ok sorry sem lama… nevšiml jsem si že template je až pod Call stack-em