Εξερευνητής AST JavaScript
Επικολλήστε κώδικα JavaScript και εξερευνήστε το αφηρημένο συντακτικό δέντρο (ESTree, Acorn) στο πρόγραμμα περιήγησής σας. Εξαγωγή του AST σε JSON.
- Κόμβοι
- –
- Μέγιστο βάθος
- –
- Εντολές ανώτατου επιπέδου
- –
Κάντε κλικ σε έναν κόμβο για να επιλέξετε τον κώδικά του. Κάντε κλικ ή μετακινήστε τον δρομέα στον κώδικα για να βρείτε τον κόμβο του.
Επιλέξτε έναν κόμβο στο δέντρο ή κάντε κλικ στον κώδικα.
- Τύπος
- Ιδιότητα
- Εύρος (θέσεις χαρακτήρων)
- Θέση
- Ιδιότητες
- Πηγαίος κώδικας του κόμβου
JSON ESTree
Πώς να εξερευνήσετε το AST ενός κώδικα JavaScript
- Επικολλήστε τον κώδικά σας στο πεδίο Κώδικας JavaScript ή πατήστε Φόρτωση παραδείγματος για να ξεκινήσετε από μια μικρή λειτουργική μονάδα.
- Επιλέξτε τον Τύπο πηγαίου κώδικα: Λειτουργική μονάδα (import/export, αυστηρή λειτουργία) για ενότητες ES ή Σενάριο (κλασικό) για απλά σενάρια που μπορεί να χρησιμοποιούν χαρακτηριστικά μη αυστηρής λειτουργίας, όπως το
with. - Το δέντρο ενημερώνεται λίγο αφότου σταματήσετε να πληκτρολογείτε. Πατήστε Ανάλυση για άμεση εκτέλεση.
- Στο Συντακτικό δέντρο, κάντε κλικ στο μικρό βέλος για να αναπτύξετε ή να συμπτύξετε έναν κόμβο. Κάντε κλικ στο όνομα ενός κόμβου για να επιλεγεί ο αντίστοιχος κώδικας στον επεξεργαστή. Ο πίνακας Επιλεγμένος κόμβος εμφανίζει τον τύπο του, την ιδιότητα στην οποία ανήκει, το εύρος χαρακτήρων, τη γραμμή και τη στήλη, τις απλές ιδιότητές του (όνομα, τελεστής, τιμή…) και τον πηγαίο κώδικά του.
- Λειτουργεί και αντίστροφα: κάντε κλικ οπουδήποτε στον κώδικα, μετακινήστε τον δρομέα με το πληκτρολόγιο ή επιλέξτε ένα κομμάτι κώδικα και ο βαθύτερος κόμβος που το περιέχει αναπτύσσεται και επισημαίνεται στο δέντρο.
- Ανοίξτε το JSON ESTree για να δείτε ολόκληρο το δέντρο ως JSON, με ή χωρίς Συμπερίληψη θέσεων (start, end, loc), και μετά πατήστε Αντιγραφή ή Λήψη JSON.
Οι μετρητές δείχνουν τον αριθμό των Κόμβων, το Μέγιστο βάθος του δέντρου και τον αριθμό των Εντολών ανώτατου επιπέδου.
Τι είναι το αφηρημένο συντακτικό δέντρο;
Πριν μια μηχανή JavaScript, ένας linter ή ένας bundler κάνει οτιδήποτε με τον κώδικά σας, αναλύει το κείμενο σε ένα δέντρο κόμβων. Κάθε κόμβος έχει έναν type (VariableDeclaration, CallExpression, Identifier…) και θυγατρικούς κόμβους που αποθηκεύονται σε ονομασμένες ιδιότητες. Για το total += size; προκύπτει ένα ExpressionStatement του οποίου το expression είναι ένα AssignmentExpression με τελεστή +=, αριστερό αναγνωριστικό total και δεξί αναγνωριστικό size. Οι παρενθέσεις, τα semicolons και τα σχόλια εξαφανίζονται: το δέντρο κρατά μόνο τη δομή που μετράει, και γι’ αυτό λέγεται «αφηρημένο».
Το εργαλείο χρησιμοποιεί τον Acorn, τον μικρό και γρήγορο αναλυτή που βρίσκεται πίσω από πολλά εργαλεία JavaScript, με ecmaVersion: "latest". Η έξοδος ακολουθεί το ESTree, την κοινή μορφή που παράγει και ο Espree (ESLint) και καταλαβαίνουν τα περισσότερα εργαλεία μετασχηματισμού κώδικα. Η γνώση των ακριβών τύπων κόμβων είναι απαραίτητη όταν γράφετε έναν κανόνα ESLint, ένα codemod για Babel ή jscodeshift, ένα πρόσθετο Prettier ή οποιοδήποτε σενάριο αναλύει κώδικα.
Θέσεις, εύρη και εξαγωγή σε JSON
Κάθε κόμβος έχει τα start και end, δηλαδή τις θέσεις του πρώτου και του επόμενου του τελευταίου χαρακτήρα στον πηγαίο κώδικα, καθώς και ένα αντικείμενο loc με γραμμές (από το 1) και στήλες. Στο JSON οι στήλες ξεκινούν από το 0, όπως στην έξοδο του Acorn. Ο πίνακας Επιλεγμένος κόμβος τις εμφανίζει από το 1, όπως οι περισσότεροι επεξεργαστές. Αποεπιλέξτε το Συμπερίληψη θέσεων (start, end, loc) για να πάρετε ελαφρύτερο JSON, που συγκρίνεται ευκολότερα ανάμεσα σε δύο εκδόσεις του κώδικα.
Ορισμένες τιμές δεν μπορούν να γραφτούν σε JSON: τα literals κανονικών εκφράσεων παίρνουν "value": null (η ιδιότητα regex κρατά το μοτίβο και τις σημαίες) και τα literals BigInt γράφονται ως συμβολοσειρές, όπως συνιστά η προδιαγραφή ESTree.
Όρια και απόρρητο
Ο κώδικας αναλύεται στο πρόγραμμα περιήγησής σας και δεν εκτελείται ποτέ ούτε στέλνεται οπουδήποτε: ο αναλυτής απλώς διαβάζει το κείμενο. Η είσοδος περιορίζεται σε ένα εκατομμύριο χαρακτήρες. Τα πολύ μεγάλα δέντρα εμφανίζονται κατά απαίτηση, μια παρτίδα θυγατρικών κάθε φορά, και ένα JSON που είναι πολύ μεγάλο για προεπισκόπηση μπορεί πάντα να ληφθεί. Τα JSX και TypeScript δεν είναι τυπική JavaScript, επομένως ο Acorn τα αναφέρει ως συντακτικά σφάλματα.
Συχνές ερωτήσεις
Γιατί βλέπω «Συντακτικό σφάλμα στη γραμμή 1, στήλη 1»;
Ο κώδικας δεν είναι έγκυρη JavaScript για τον επιλεγμένο τύπο πηγαίου κώδικα. Το μήνυμα δίνει τη γραμμή, τη στήλη και την εξήγηση του Acorn. Συχνή αιτία είναι η χρήση import ή export ενώ έχει επιλεγεί Σενάριο (κλασικό), ή οι δηλώσεις τύπων TypeScript και το JSX, που ο Acorn δεν αναλύει.
Ποια είναι η διαφορά ανάμεσα σε λειτουργική μονάδα και σενάριο;
Οι λειτουργικές μονάδες (modules) τρέχουν πάντα σε αυστηρή λειτουργία, επιτρέπουν import, export και await στο ανώτατο επίπεδο, και απαγορεύουν το with και τα οκταδικά literals. Τα σενάρια είναι η κλασική λειτουργία του <script>. Το δέντρο καταγράφει την επιλογή στην ιδιότητα sourceType του κόμβου Program.
Εκτελείται ο κώδικας;
Όχι. Η ανάλυση απλώς μετατρέπει το κείμενο σε δομή δεδομένων. Τίποτα δεν αποτιμάται, καμία συνάρτηση δεν καλείται και δεν γίνεται αίτημα δικτύου, οπότε μπορείτε να εξετάσετε με ασφάλεια ακόμη και αμφιβόλου προέλευσης ή κακόβουλο κώδικα.
Εμφανίζονται τα σχόλια στο δέντρο;
Όχι. Το ESTree δεν συνδέει σχόλια με τους κόμβους, άρα δεν αποτελούν μέρος του δέντρου. Μπορείτε όμως να τα δείτε στον πηγαίο κώδικα του κόμβου, στον πίνακα Επιλεγμένος κόμβος.
Ποια έκδοση της JavaScript υποστηρίζεται;
Ο Acorn είναι ρυθμισμένος στην πιο πρόσφατη έκδοση ECMAScript που γνωρίζει, η οποία περιλαμβάνει προαιρετική αλυσιδωτή πρόσβαση (optional chaining), nullish coalescing, BigInt, πεδία κλάσεων και ιδιωτικές μεθόδους, top-level await, σημαίες κανονικών εκφράσεων όπως το v και άλλη πρόσφατη σύνταξη.
Σχετικά εργαλεία
- Μορφοποίηση και ελαχιστοποίηση JavaScript Μορφοποιήστε ελαχιστοποιημένη JavaScript, ελαχιστοποιήστε την με το Terser ή ελέγξτε τη σύνταξή της με γραμμή και στήλη σφάλματος, στο πρόγραμμα περιήγησης.
- Διάγραμμα regex (railroad) Μετατρέψτε μια κανονική έκφραση JavaScript σε σαφές διάγραμμα railroad με ομάδες, εναλλακτικές, επαναλήψεις και lookarounds και εξαγάγετέ το σε SVG ή PNG.
- Μορφοποίηση και επικύρωση JSON Δωρεάν μορφοποίηση και επικύρωση JSON που κάνει beautify, minify και έλεγχο του JSON στο πρόγραμμα περιήγησής σας, με συντακτικά σφάλματα ανά γραμμή και στήλη.