Utilia

JavaScript-AST-Explorer

JavaScript einfügen und den abstrakten Syntaxbaum (ESTree, geparst mit Acorn) im Browser erkunden: Knoten anklicken, Code sehen, AST als JSON exportieren.

Quelltyp
Knoten
–
Maximale Tiefe
–
Anweisungen auf oberster Ebene
–
Syntaxbaum

Klicken Sie auf einen Knoten, um seinen Code zu markieren. Klicken Sie in den Code oder bewegen Sie den Cursor, um den zugehörigen Knoten zu finden.

    Ausgewählter Knoten

    Wählen Sie einen Knoten im Baum aus oder klicken Sie in den Code.

    ESTree-JSON

    So erkunden Sie einen JavaScript-AST

    1. Fügen Sie Ihren Code in das Feld JavaScript-Code ein oder klicken Sie auf Beispiel laden, um mit einem kleinen Modul zu beginnen.
    2. Wählen Sie den Quelltyp: Modul (import/export, Strict Mode) für ES-Module oder Skript (klassisch) für gewöhnliche Skripte, die etwa Sloppy-Mode-Konstrukte wie with verwenden.
    3. Der Baum wird kurz nach dem Tippen automatisch aktualisiert. Mit Parsen starten Sie den Vorgang sofort.
    4. Im Syntaxbaum klappen Sie einen Knoten über den kleinen Pfeil auf oder zu. Ein Klick auf den Namen eines Knotens markiert den passenden Code im Editor. Das Feld Ausgewählter Knoten zeigt dann Typ, die Eigenschaft, zu der er gehört, seinen Zeichenbereich, Zeile und Spalte, seine einfachen Eigenschaften (Name, Operator, Rohwert …) und seinen Quelltext.
    5. Das funktioniert auch umgekehrt: Klicken Sie irgendwo in den Code, bewegen Sie den Cursor mit der Tastatur oder markieren Sie ein Codestück – der tiefste Knoten, der diese Stelle enthält, wird im Baum aufgeklappt und hervorgehoben.
    6. Öffnen Sie ESTree-JSON, um den vollständigen Baum als JSON zu sehen, wahlweise mit Positionen einbeziehen (start, end, loc). Anschließend können Sie ihn kopieren oder mit JSON herunterladen speichern.

    Die Zähler zeigen die Anzahl der Knoten, die maximale Tiefe des Baums und die Zahl der Anweisungen auf oberster Ebene.

    Was ist ein abstrakter Syntaxbaum?

    Bevor eine JavaScript-Engine, ein Linter oder ein Bundler irgendetwas mit Ihrem Code anfangen kann, zerlegt er den Text in einen Baum aus Knoten. Jeder Knoten hat einen type (VariableDeclaration, CallExpression, Identifier …) und Kindknoten, die in benannten Eigenschaften liegen. Aus total += size; wird ein ExpressionStatement, dessen expression eine AssignmentExpression mit dem Operator +=, dem Bezeichner total als left und dem Bezeichner size als right ist. Klammern, Semikolons und Kommentare verschwinden: Der Baum behält nur die Struktur, auf die es ankommt – deshalb heißt er abstrakt.

    Dieses Tool verwendet Acorn, den kleinen und schnellen Parser, der in vielen JavaScript-Werkzeugen steckt, mit ecmaVersion: "latest". Die Ausgabe folgt ESTree, dem gemeinsamen Format, das auch Espree (ESLint) erzeugt und das die meisten Werkzeuge zur Codetransformation verstehen. Die genauen Knotentypen zu kennen ist unverzichtbar, wenn Sie eine ESLint-Regel, einen Codemod für Babel oder jscodeshift, ein Prettier-Plugin oder ein beliebiges Skript zur Codeanalyse schreiben.

    Positionen, Bereiche und JSON-Export

    Jeder Knoten besitzt start und end, also die Offsets seines ersten Zeichens und des Zeichens direkt nach seinem letzten Zeichen im Quelltext, sowie ein loc-Objekt mit Zeilen (ab 1) und Spalten. Im JSON beginnen die Spalten wie in der Ausgabe von Acorn bei 0; das Feld Ausgewählter Knoten zählt sie dagegen wie die meisten Editoren ab 1. Deaktivieren Sie Positionen einbeziehen (start, end, loc), erhalten Sie ein schlankeres JSON, das sich zwischen zwei Codeversionen leichter vergleichen lässt.

    Einige Werte lassen sich nicht als JSON darstellen: Literale regulärer Ausdrücke erhalten "value": null (ihre Eigenschaft regex enthält weiterhin Muster und Flags), und BigInt-Literale werden, wie von der ESTree-Spezifikation empfohlen, als Zeichenketten geschrieben.

    Grenzen und Datenschutz

    Der Code wird in Ihrem Browser geparst und weder ausgeführt noch irgendwohin gesendet: Der Parser liest nur den Text. Die Eingabe ist auf eine Million Zeichen begrenzt. Sehr große Bäume werden bei Bedarf gerendert, jeweils eine Gruppe von Kindknoten auf einmal, und ein JSON, das für die Vorschau zu groß ist, können Sie trotzdem herunterladen. JSX und TypeScript sind kein Standard-JavaScript, daher meldet Acorn sie als Syntaxfehler.

    Häufige Fragen

    Warum erhalte ich „Syntaxfehler in Zeile 1, Spalte 1“?

    Der Code ist für den gewählten Quelltyp kein gültiges JavaScript. Die Meldung nennt Zeile, Spalte und die Erklärung von Acorn. Häufige Ursachen sind import oder export, während Skript (klassisch) ausgewählt ist, oder TypeScript-Annotationen und JSX, die Acorn nicht parst.

    Was ist der Unterschied zwischen Modul und Skript?

    Module laufen immer im Strict Mode, erlauben import, export und await auf oberster Ebene und verbieten with sowie oktale Literale. Skripte entsprechen dem klassischen <script>-Modus. Der Baum hält die Wahl außerdem in der Eigenschaft sourceType des Knotens Program fest.

    Wird der Code ausgeführt?

    Nein. Beim Parsen wird der Text lediglich in eine Datenstruktur umgewandelt. Nichts wird ausgewertet, keine Funktion aufgerufen und keine Netzwerkanfrage gestellt. Sie können also auch nicht vertrauenswürdigen oder sogar bösartigen Code gefahrlos untersuchen.

    Werden Kommentare im Baum angezeigt?

    Nein. ESTree hängt Kommentare nicht an Knoten an, daher sind sie nicht Teil des Baums. Im Quelltext des Knotens im Feld Ausgewählter Knoten sehen Sie sie aber trotzdem.

    Welche JavaScript-Version wird unterstützt?

    Acorn ist auf die neueste ihm bekannte ECMAScript-Version eingestellt. Dazu gehören Optional Chaining, Nullish Coalescing, BigInt, Klassenfelder und private Methoden, await auf oberster Ebene, Flags regulärer Ausdrücke wie v und weitere aktuelle Syntax.