You are here: PSPad forum > Bug report / Hlášení chyb > Re: Problém v rozeznávání/parsování funkcí

Re: Problém v rozeznávání/parsování funkcí

#1 Problém v rozeznávání/parsování funkcí

Posted by: prema_van_smuuf | Date: 2013-03-29 10:12 | IP: IP Logged

Ahoj, narazil jsem na dost zajímavý (a podle mě docela zásadní problém) při tom, když PsPad analyzuje PHP kód a ukazuje jeho strukturu v Code Exploreru.

(Stejně tak jsem ráno řešil problém s tím, že se mi automaticky nezapínal HTML multihighlighter, načež jsem po hodině osekávání kódu a analyzování zjistil, že se to děje jen u souborů nad 200kb.

Tak jsem šel jsem na tohle fórum a v jednom z posledních 'bug reportů' jsem zjistil, že si akorát stačilo přečíst tvojí hbitou reakci a přepsat v .INI hodnotu na větší číslo

smiling smiley

..každopádně bych tímto rád doporučil, aby číslo MultiHLOnUpToSize bylo mnohem větší než 200000 už defaultně. Při dnešní rychlosti počítačů to, myslím, problém nebude.)

Ale abych se vrátil k tomu původnímu problému:

Vypadá to, že se parser kódu PsPadu nedokáže prokousat přes určitou konstrukci znaků. Přišel jsem na to při použití této PHP preg_match funkce, která má odhalovat HTTP odkazy v textu:

Quote:
if (preg_match('%^https?://%', $variable)) {

Příklad #1: Takhle jsem měl normálně postavený kód.
Mnou definované funkce uvnitř mnou definované třídy. Funkce před sebou mají keyword 'public':

Quote:
<?php
class classic_class{
public function one(){
echo "ahoj."
}
public function two(){
echo "nazdar."
}
public function three(){
if (preg_match('%^https?://%', $variable)) {
echo "error."
}
}
public function four(){
echo "cau."
}
public function five(){
echo "prijemnej vecer na spacir."
}
}
?>

V Code Exploreru se objeví tohle #1:
image
Tady jsem si problému všiml, protože mi zničehonic ze seznamu zmizela polovina funkcí (od té, kde je ten regex, až úplně na konec). Čili: Po použití..

Quote:
'://' {
}

(nejsou kolem toho potřeba kulaté závorky a ta ani původní čárka za tím, složená závorka tam naopak potřeba je a ukončovací složená závorka nesmí být hned za tím, ale až na dalším řádku) ..PsPad přestane vnímat všechny funkce napsané po té, ve které se tohle objeví.

Opravdu, kamkoliv jsem tohle vzal a strčil do kterékoliv funkce, tak ty všechny co následovaly PsPad přestal vnímat.

Příklad #2: Další zajímavé věci se stanou, když z definicí funkcí ostraním keyword 'public'.

Quote:
<?php
class classic_class{
function one(){
echo "ahoj."
}
function two(){
echo "nazdar."
}
function three(){
'://' {
}
}
function four(){
echo "cau."
}
function five(){
echo "prijemnej vecer na spacir."
}
}
?>

V Code Exploreru se objeví tohle #2:
image
PsPad je tedy sice nějak přečte, ale neumí si je přiřadit k té třídě, ve které jsou napsané a do které patří.

Příklad #3:
A když odstraním rodičovskou třídu a funkce nasekám prostě volně za sebe:

Quote:
<?php
function one(){
echo "ahoj."
}
function two(){
echo "nazdar."
}
function three(){
'://' {
}
}
function four(){
echo "cau."
}
function five(){
echo "prijemnej vecer na spacir."
}
?>

..tak se v Code Exploreru objeví tohle #3:
image
Což je asi teda správně smiling smiley

...

Doufám, že to není nějaká mnou nepochopená feature PsPadu a že nejsem za vola, když to tady tak rozebírám :D
Pokud ne, tak doufám, že jsem ten problém nastínil nějak dobře a snad konstruktivně, aby se to případně dalo co nejdříve vyřešit.

Mezitím asi budu muset ren regex z kódu vynechat.
EDIT: Tak nakonec stačí dát první složenou závorku na další řádek. PsPad pak najde a vypíše i funkce následující.

Tak pěkný den a díky smiling smiley

Edited 1 time(s). Last edit at 2013-03-29 10:48 by prema_van_smuuf.

Options: Reply | Quote | Up ^


#2 Re: Problém v rozeznávání/parsování funkcí

Posted by: prema_van_smuuf | Date: 2013-03-29 10:17 | IP: IP Logged

Dodám, že se tak děje v nejposlednější verzi 4.5.8 (2453) a i ve verzi 4.5.7.

Options: Reply | Quote | Up ^


#3 Re: Problém v rozeznávání/parsování funkcí

Posted by: Vany | Date: 2013-03-29 11:32 | IP: IP Logged

prema_van_smuuf:
..každopádně bych tímto rád doporučil, aby číslo MultiHLOnUpToSize bylo mnohem větší než 200000 už defaultně. Při dnešní rychlosti počítačů to, myslím, problém nebude.)

No, myslím, že hodnota je nastavena empiricky na rozumnou velikost a zdrojový soubor větší než 200 kb je při běžném programování spíše výjimkou. PSPad není jenom o PHP, ale i o jiných jazycích. Defaultní hodnotu bych neměnil. Kdo potřebuje, může si ji pro svoje účely zvednout, jak je mu libo.
BTW jsem zahledal po zdrojácích a jediný soubor, co přelezl přes 200 kb, byl soubor z phpBB recode_cjk.php, 1,4 MB, protože obsahuje výčet hodnot pro překódování Unicode.

--
Vany
(PSPad 5.0.7 (705) x32, W10h/p x64 en/cs)

Options: Reply | Quote | Up ^


#4 Re: Problém v rozeznávání/parsování funkcí

Posted by: prema_van_smuuf | Date: 2013-03-29 16:23 | IP: IP Logged

@ Vany:

Já se teda nechci hádat, ale tohle je přece nesmysl smiling smiley Vyjmenuj mi jediný negativní důsledek případného navýšení.

Otestoval jsem 18 MB velký PHP soubor s 340 000 řádky kódu a multihighlighter jej na dva roky starém Core i5-480M 2.66GHz zpracovával 6 sekund (předpokládám, že se při zpracování 'textu' zapojí hlavně procesor). Při takovéto délce dokážu pochopit, že je nějaký limit, aby otevírání souboru netrvalo šest sekund, když existuje byť jen minimální možnost, že ten multihighlighter budu chtít stejně vypnout..

Na druhou stranu nevidím racionální důvod, proč tenhle limit držet defaultně na 200 kilobajtech, když to stejně trvá zlome(če)k sekundy.

A ano, člověk to může přepsat, ale pak by bylo nejlepší, aby o tomhle omezení vůbec věděl (a nebral takové chování jako jako chybu), čili možná aby o tom existovala políčko v nastavení programu.

A absolutně s tím nemá nic společného to, že PsPad není jen pro PHP. A už vůbec ne kolik (nejen PHP) zdrojáků na světě má víc než 200kb. (můj třeba už jo smiling smiley)

Edited 1 time(s). Last edit at 2013-03-29 16:27 by prema_van_smuuf.

Options: Reply | Quote | Up ^


#5 Re: Problém v rozeznávání/parsování funkcí

Posted by: pspad | Date: 2013-05-09 16:13 | IP: IP Logged

Problem s pruzkumnikem kodu je (snad) odstraneny. Oprava bude dostupna v dalsim developer buildu

Options: Reply | Quote | Up ^






Editor PSPad - freeware editor, © 2001 - 2021 Jan Fiala, Hosted by Webhosting TOJEONO.CZ, design by WebDesign PAY & SOFT, code Petr Dvořák, Privacy policy and GDPR