Utilia

AST Explorer dla JavaScriptu

Wklej kod JavaScript i przeglądaj jego abstrakcyjne drzewo składni (ESTree, parser Acorn) w przeglądarce. Klikaj węzły i eksportuj AST do JSON.

Typ źródła
Węzły
–
Maksymalna głębokość
–
Instrukcje najwyższego poziomu
–
Drzewo składni

Kliknij węzeł, aby zaznaczyć jego kod. Kliknij lub przesuń kursor w kodzie, aby znaleźć jego węzeł.

    Wybrany węzeł

    Wybierz węzeł w drzewie lub kliknij w kodzie.

    JSON ESTree

    Jak przeglądać AST kodu JavaScript

    1. Wklej kod w pole Kod JavaScript albo kliknij Wczytaj przykład, aby zacząć od małego modułu.
    2. Wybierz Typ źródła: Moduł (import/export, tryb ścisły) dla modułów ES lub Skrypt (klasyczny) dla zwykłych skryptów, które mogą korzystać z konstrukcji trybu nieścisłego, takich jak with.
    3. Drzewo odświeża się chwilę po tym, jak przestaniesz pisać. Kliknij Parsuj, aby uruchomić analizę od razu.
    4. W sekcji Drzewo składni kliknij małą strzałkę, aby rozwinąć lub zwinąć węzeł. Kliknięcie nazwy węzła zaznacza odpowiadający mu kod w edytorze, a panel Wybrany węzeł pokazuje jego typ, właściwość, do której należy, zakres znaków, wiersz i kolumnę, proste właściwości (nazwa, operator, surowa wartość…) oraz tekst źródłowy.
    5. Działa to też w drugą stronę: kliknij w dowolnym miejscu kodu, przesuń kursor klawiaturą lub zaznacz fragment, a najgłębszy węzeł, który go zawiera, zostanie rozwinięty i podświetlony w drzewie.
    6. Otwórz JSON ESTree, aby zobaczyć całe drzewo jako JSON, z opcją Dołącz pozycje (start, end, loc) lub bez niej, a potem użyj przycisku Kopiuj albo Pobierz JSON.

    Liczniki pokazują liczbę węzłów (Węzły), Maksymalną głębokość drzewa oraz liczbę Instrukcji najwyższego poziomu.

    Czym jest abstrakcyjne drzewo składni?

    Zanim silnik JavaScriptu, linter czy bundler cokolwiek zrobi z twoim kodem, zamienia tekst w drzewo węzłów. Każdy węzeł ma type (VariableDeclaration, CallExpression, Identifier…) i węzły potomne zapisane w nazwanych właściwościach. Dla total += size; otrzymasz ExpressionStatement, którego expression to AssignmentExpression z operatorem +=, identyfikatorem total po lewej (left) i identyfikatorem size po prawej (right). Nawiasy, średniki i komentarze znikają: drzewo zachowuje tylko istotną strukturę – stąd nazwa abstrakcyjne.

    Narzędzie korzysta z Acorn, małego i szybkiego parsera używanego przez wiele narzędzi JavaScript, z ustawieniem ecmaVersion: "latest". Wynik jest zgodny z ESTree – wspólnym formatem, który generuje też Espree (ESLint) i który rozumie większość narzędzi do transformacji kodu. Znajomość dokładnych typów węzłów jest niezbędna, gdy piszesz regułę ESLint, codemod w Babelu lub jscodeshift, wtyczkę do Prettiera albo dowolny skrypt analizujący kod.

    Pozycje, zakresy i eksport do JSON

    Każdy węzeł ma start i end – pozycję pierwszego znaku oraz pozycję tuż za ostatnim znakiem w źródle – a także obiekt loc z wierszami (od 1) i kolumnami. W JSON-ie kolumny liczone są od 0, tak jak w wyniku Acorna; panel Wybrany węzeł pokazuje je od 1, jak większość edytorów. Odznacz Dołącz pozycje (start, end, loc), aby uzyskać lżejszy JSON, który łatwiej porównać między dwiema wersjami kodu.

    Niektórych wartości nie da się zapisać w JSON-ie: literały wyrażeń regularnych dostają "value": null (ich właściwość regex zachowuje wzorzec i flagi), a literały BigInt zapisywane są jako ciągi znaków, zgodnie z zaleceniem specyfikacji ESTree.

    Limity i prywatność

    Kod jest parsowany w twojej przeglądarce, nigdy nie jest wykonywany ani nigdzie wysyłany: parser tylko czyta tekst. Dane wejściowe są ograniczone do miliona znaków. Bardzo duże drzewa renderowane są na żądanie, partiami węzłów potomnych, a JSON zbyt duży na podgląd nadal można pobrać. JSX i TypeScript nie są standardowym JavaScriptem, więc Acorn zgłasza je jako błędy składni.

    Najczęściej zadawane pytania

    Dlaczego widzę „Błąd składni w wierszu 1, kolumna 1”?

    Kod nie jest poprawnym JavaScriptem dla wybranego typu źródła. Komunikat podaje wiersz, kolumnę i wyjaśnienie Acorna (po angielsku). Częsta przyczyna to import lub export przy wybranej opcji Skrypt (klasyczny) albo adnotacje TypeScriptu i JSX, których Acorn nie parsuje.

    Czym różni się Moduł od Skryptu?

    Moduły zawsze działają w trybie ścisłym, pozwalają na import, export i await na najwyższym poziomie, a zabraniają with i literałów ósemkowych. Skrypty to klasyczny tryb znacznika <script>. Drzewo zapisuje ten wybór we właściwości sourceType węzła Program.

    Czy kod jest wykonywany?

    Nie. Parsowanie jedynie zamienia tekst w strukturę danych. Nic nie jest obliczane, żadna funkcja nie jest wywoływana i nie pada żadne żądanie sieciowe, więc możesz bezpiecznie badać niezaufany, a nawet złośliwy kod.

    Czy komentarze są widoczne w drzewie?

    Nie. ESTree nie dołącza komentarzy do węzłów, więc nie są częścią drzewa, ale nadal zobaczysz je w tekście źródłowym węzła w panelu Wybrany węzeł.

    Która wersja JavaScriptu jest obsługiwana?

    Acorn jest ustawiony na najnowszą znaną mu wersję ECMAScript, która obejmuje m.in. optional chaining, operator ??, BigInt, pola klas i metody prywatne, await na najwyższym poziomie, flagi wyrażeń regularnych takie jak v oraz inne nowe elementy składni.