Raziskovalec AST za JavaScript
Prilepi kodo JavaScript in v brskalniku razišči abstraktno sintaksno drevo (ESTree, Acorn). Klikaj vozlišča in izvozi AST kot JSON.
- Vozlišča
- –
- Največja globina
- –
- Stavki na vrhnji ravni
- –
Klikni vozlišče, da izbereš njegovo kodo. Klikni ali premakni kazalec v kodi, da najdeš njeno vozlišče.
Izberi vozlišče v drevesu ali klikni v kodo.
- Tip
- Lastnost
- Obseg (odmiki znakov)
- Položaj
- Lastnosti
- Izvorna koda vozlišča
JSON ESTree
Kako raziskati AST kode JavaScript
- Prilepi kodo v polje Koda JavaScript ali klikni Naloži primer, da začneš z manjšim modulom.
- Izberi Vrsta vira: Modul (import/export, strogi način) za module ES ali Skript (klasičen) za običajne skripte, ki lahko uporabljajo funkcije nestrogega načina, na primer
with. - Drevo se osveži trenutek po tem, ko nehaš tipkati. Z gumbom Razčleni ga osvežiš takoj.
- V Sintaksno drevo z majhno puščico razširiš ali strneš vozlišče. S klikom na ime vozlišča v urejevalniku označiš ustrezno kodo. Plošča Izbrano vozlišče prikaže njegov tip, lastnost, ki ji pripada, obseg znakov, vrstico in stolpec, preproste lastnosti (ime, operator, surova vrednost …) in izvorno besedilo.
- Deluje tudi v nasprotni smeri: klikni kamor koli v kodo, premakni kazalec s tipkovnico ali označi del kode, in najgloblje vozlišče, ki ga vsebuje, se v drevesu razširi in poudari.
- Odpri JSON ESTree, da vidiš celotno drevo kot JSON, z možnostjo Vključi položaje (start, end, loc) ali brez nje, nato ga Kopiraj ali Prenesi JSON.
Števci prikazujejo število Vozlišča, Največja globina drevesa in število Stavki na vrhnji ravni.
Kaj je abstraktno sintaksno drevo?
Preden lahko izvajalnik JavaScript, linter ali pakirnik karkoli naredi s tvojo kodo, besedilo razčleni v drevo vozlišč. Vsako vozlišče ima type (VariableDeclaration, CallExpression, Identifier …) in podrejena vozlišča v poimenovanih lastnostih. Za total += size; dobiš ExpressionStatement, katerega expression je AssignmentExpression z operatorjem +=, levim identifikatorjem total in desnim identifikatorjem size. Oklepaji, podpičja in komentarji izginejo: drevo ohrani le strukturo, ki je pomembna, zato mu pravimo abstraktno.
Orodje uporablja Acorn, majhen in hiter razčlenjevalnik, na katerem temelji veliko orodij za JavaScript, z nastavitvijo ecmaVersion: "latest". Izhod sledi formatu ESTree, ki ga ustvarja tudi Espree (ESLint) in ga razume večina orodij za preoblikovanje kode. Natančno poznavanje tipov vozlišč je nujno, ko pišeš pravilo za ESLint, kodemod za Babel ali jscodeshift, vtičnik za Prettier ali kateri koli skript, ki analizira kodo.
Položaji, obsegi in izvoz JSON
Vsako vozlišče ima start in end, torej odmik prvega znaka in znaka za zadnjim znakom v izvorni kodi, ter objekt loc z vrsticami (od 1) in stolpci. V JSON se stolpci štejejo od 0, kakor v izhodu Acorna, plošča Izbrano vozlišče pa jih prikazuje od 1, kot večina urejevalnikov. Odstrani kljukico pri Vključi položaje (start, end, loc) za lažji JSON, ki ga je preprosteje primerjati med dvema različicama kode.
Nekaterih vrednosti ni mogoče zapisati v JSON: literali regularnih izrazov dobijo "value": null (lastnost regex ohrani vzorec in zastavice), literali BigInt pa so zapisani kot nizi, kot priporoča specifikacija ESTree.
Omejitve in zasebnost
Koda se razčleni v tvojem brskalniku in se nikoli ne izvede ali pošlje drugam: razčlenjevalnik besedilo le prebere. Vnos je omejen na milijon znakov. Zelo velika drevesa se izrisujejo sproti, po skupinah podrejenih vozlišč, JSON, ki je prevelik za predogled, pa lahko vseeno preneseš. JSX in TypeScript nista standardni JavaScript, zato ju Acorn javi kot sintaksni napaki.
Pogosta vprašanja
Zakaj dobim »Sintaksna napaka v vrstici 1, stolpec 1«?
Koda ni veljavna koda JavaScript za izbrano vrsto vira. Sporočilo navede vrstico, stolpec in Acornovo razlago. Pogost vzrok je import ali export pri izbranem Skript (klasičen) ali pa anotacije TypeScript in JSX, ki jih Acorn ne razčleni.
Kakšna je razlika med modulom in skriptom?
Moduli so vedno v strogem načinu, dovoljujejo import, export in await na vrhnji ravni ter prepovedujejo with in osmiške literale. Skripti so klasični način <script>. Izbira se zapiše tudi v lastnost sourceType vozlišča Program.
Ali se koda izvede?
Ne. Razčlenjevanje besedilo le pretvori v podatkovno strukturo. Nič se ne ovrednoti, nobena funkcija se ne pokliče in nobena zahteva ne gre v omrežje, zato lahko varno pregledaš tudi nezaupanja vredno ali celo zlonamerno kodo.
Ali so komentarji prikazani v drevesu?
Ne. ESTree komentarjev ne pripenja vozliščem, zato niso del drevesa, vidiš pa jih lahko v izvornem besedilu vozlišča v plošči Izbrano vozlišče.
Katero različico JavaScripta orodje podpira?
Acorn je nastavljen na najnovejšo različico ECMAScript, ki jo pozna. Podpira izbirno veriženje, združevanje ničelnih vrednosti, BigInt, polja razredov in zasebne metode, await na vrhnji ravni, zastavice regularnih izrazov, kot je v, in drugo novejšo sintakso.
Sorodna orodja
- Oblikovalnik in zmanjševalnik JavaScript Polepšaj zmanjšan JavaScript, zmanjšaj ga s Terserjem ali preveri sintakso z natančno vrstico in stolpcem napake. Deluje samo v tvojem brskalniku.
- Diagram regularnega izraza Spremeni regularni izraz JavaScripta v jasen železniški diagram s skupinami, alternativami, zankami in pogledi okoli, nato ga izvozi kot SVG ali PNG.
- Oblikovalnik in preverjevalnik JSON Brezplačen oblikovalnik in preverjevalnik JSON, ki v brskalniku polepša, zmanjša in preveri JSON, sintaksne napake pa javi z vrstico in stolpcem.