AST Explorer JavaScript
Incolla codice JavaScript ed esplora il suo albero sintattico astratto (ESTree, generato da Acorn) nel browser. Clicca sui nodi ed esporta l'AST in JSON.
- Nodi
- –
- Profondità massima
- –
- Istruzioni di primo livello
- –
Clicca su un nodo per selezionarne il codice. Clicca o sposta il cursore nel codice per trovare il nodo corrispondente.
Seleziona un nodo nell'albero o clicca nel codice.
- Tipo
- Proprietà
- Intervallo (offset dei caratteri)
- Posizione
- Proprietà
- Sorgente del nodo
JSON ESTree
Come esplorare l’AST di un codice JavaScript
- Incolla il tuo codice in Codice JavaScript, oppure clicca su Carica l’esempio per partire da un piccolo modulo.
- Scegli il Tipo di sorgente: Modulo (import/export, strict mode) per gli ES module, oppure Script (classico) per gli script tradizionali che possono usare funzionalità della modalità non strict, come
with. - L’albero si aggiorna un istante dopo che smetti di scrivere. Clicca su Analizza per avviare subito l’analisi.
- Nell’Albero sintattico, clicca sulla piccola freccia per espandere o comprimere un nodo. Clicca sul nome di un nodo per selezionare il codice corrispondente nell’editor: il pannello Nodo selezionato mostra il tipo, la proprietà a cui appartiene, l’intervallo di caratteri, riga e colonna, le proprietà semplici (nome, operatore, valore raw…) e il testo sorgente.
- Funziona anche al contrario: clicca in un punto qualsiasi del codice, sposta il cursore con la tastiera o seleziona un pezzo di codice, e il nodo più profondo che lo contiene viene espanso ed evidenziato nell’albero.
- Apri JSON ESTree per vedere l’intero albero in formato JSON, con o senza Includi le posizioni (start, end, loc), poi usa Copia o Scarica JSON.
I contatori mostrano il numero di Nodi, la Profondità massima dell’albero e il numero di Istruzioni di primo livello.
Che cos’è un albero sintattico astratto?
Prima che un motore JavaScript, un linter o un bundler possa fare qualsiasi cosa con il tuo codice, deve trasformare il testo in un albero di nodi. Ogni nodo ha un type (VariableDeclaration, CallExpression, Identifier…) e dei nodi figli salvati in proprietà con un nome. Per total += size; ottieni un ExpressionStatement la cui expression è un AssignmentExpression con l’operatore +=, un identificatore left chiamato total e un identificatore right chiamato size. Parentesi, punti e virgola e commenti spariscono: l’albero conserva solo la struttura che conta, ed è per questo che si chiama astratto.
Questo strumento usa Acorn, il parser piccolo e veloce alla base di molti strumenti JavaScript, con ecmaVersion: "latest". Il risultato segue ESTree, il formato condiviso prodotto anche da Espree (ESLint) e compreso dalla maggior parte degli strumenti di trasformazione del codice. Conoscere i tipi di nodo esatti è fondamentale quando scrivi una regola ESLint, un codemod Babel o jscodeshift, un plugin Prettier o qualsiasi script che analizza codice.
Posizioni, intervalli ed esportazione JSON
Ogni nodo contiene start e end, cioè l’offset del suo primo carattere e quello successivo all’ultimo nel sorgente, e un oggetto loc con righe (a partire da 1) e colonne. Nel JSON le colonne partono da 0, come nell’output di Acorn; il pannello Nodo selezionato le mostra a partire da 1, come la maggior parte degli editor. Togli la spunta da Includi le posizioni (start, end, loc) per ottenere un JSON più leggero, più facile da confrontare tra due versioni del codice.
Alcuni valori non si possono scrivere in JSON: i letterali delle espressioni regolari ricevono "value": null (la loro proprietà regex conserva pattern e flag) e i letterali BigInt vengono scritti come stringhe, come raccomanda la specifica ESTree.
Limiti e privacy
Il codice viene analizzato nel tuo browser e non viene mai eseguito né inviato altrove: il parser legge soltanto il testo. L’input è limitato a un milione di caratteri. Gli alberi molto grandi vengono disegnati su richiesta, un gruppo di figli alla volta, e un JSON troppo grande per l’anteprima si può comunque scaricare. JSX e TypeScript non sono JavaScript standard, quindi Acorn li segnala come errori di sintassi.
Domande frequenti
Perché ricevo "Errore di sintassi alla riga 1, colonna 1"?
Il codice non è JavaScript valido per il tipo di sorgente scelto. Il messaggio indica la riga, la colonna e la spiegazione di Acorn. Una causa frequente è usare import o export con Script (classico) selezionato, oppure annotazioni TypeScript e JSX, che Acorn non analizza.
Che differenza c'è tra Modulo e Script?
I moduli sono sempre in strict mode, permettono import, export e await di primo livello, e vietano with e i letterali ottali. Gli script corrispondono alla modalità classica di <script>. L’albero registra la scelta anche nella proprietà sourceType del nodo Program.
Il codice viene eseguito?
No. L’analisi trasforma solo il testo in una struttura dati. Niente viene valutato, nessuna funzione viene chiamata e non parte alcuna richiesta di rete, quindi puoi ispezionare in sicurezza codice non affidabile o perfino malevolo.
I commenti compaiono nell'albero?
No. ESTree non collega i commenti ai nodi, quindi non fanno parte dell’albero, ma li vedi comunque nel testo sorgente del nodo nel pannello Nodo selezionato.
Quale versione di JavaScript è supportata?
Acorn è impostato sull’ultima versione di ECMAScript che conosce, che include optional chaining, nullish coalescing, BigInt, campi di classe e metodi privati, await di primo livello, flag delle espressioni regolari come v e altra sintassi recente.
Strumenti correlati
- Formattatore e minificatore JavaScript Rendi leggibile il JavaScript minificato, minificalo con Terser o controllane la sintassi con riga e colonna esatte di ogni errore. Solo nel tuo browser.
- Diagramma railroad delle regex Trasforma un'espressione regolare JavaScript in un chiaro diagramma railroad con gruppi, alternative, cicli e lookaround, ed esportalo in SVG o PNG.
- Formattatore e validatore JSON Formattatore e validatore JSON gratuito che formatta, minifica e controlla il JSON nel browser, con gli errori di sintassi indicati per riga e colonna.