مستكشف شجرة AST لـ JavaScript
الصق شيفرة JavaScript واستكشف شجرة الصياغة المجردة (ESTree عبر Acorn) في متصفحك، مع ربط العقد بالشيفرة وتصدير الشجرة بصيغة JSON.
- العُقد
- –
- أقصى عمق
- –
- تعليمات المستوى الأعلى
- –
انقر عقدة لتحديد شيفرتها. انقر في الشيفرة أو حرّك المؤشر فيها للعثور على عقدتها.
حدّد عقدة في الشجرة أو انقر في الشيفرة.
- النوع
- الخاصية
- النطاق (مواضع الأحرف)
- الموقع
- الخصائص
- مصدر العقدة
ESTree JSON
كيفية استكشاف شجرة AST لشيفرة JavaScript
- الصق شيفرتك في حقل شيفرة JavaScript، أو انقر تحميل المثال لتبدأ بوحدة صغيرة جاهزة.
- اختر نوع المصدر: وحدة Module (import/export، الوضع الصارم) لوحدات ES، أو سكربت Script (تقليدي) للسكربتات العادية التي قد تستخدم ميزات الوضع غير الصارم مثل
with. - تتحدّث الشجرة بعد لحظة من توقفك عن الكتابة. انقر تحليل لتشغيل التحليل فورًا.
- في شجرة الصياغة، انقر السهم الصغير لتوسيع العقدة أو طيّها. وانقر اسم العقدة لتحديد الشيفرة المقابلة لها في المحرر؛ فتعرض لوحة العقدة المحددة نوعها، والخاصية التي تنتمي إليها، ونطاق أحرفها، وسطرها وعمودها، وخصائصها البسيطة (الاسم، والعامل، والقيمة الخام…) ونصها المصدري.
- ويعمل الربط في الاتجاه المعاكس أيضًا: انقر في أي مكان من الشيفرة، أو حرّك المؤشر بلوحة المفاتيح، أو حدّد جزءًا منها، فتُوسَّع أعمق عقدة تحتويه وتُبرز في الشجرة.
- افتح ESTree JSON لعرض الشجرة كاملة بصيغة JSON، مع خيار تضمين المواضع (start وend وloc) أو دونه، ثم انسخها أو استخدم تنزيل JSON.
تعرض العدّادات عدد العُقد، وأقصى عمق للشجرة، وعدد تعليمات المستوى الأعلى.
ما شجرة الصياغة المجردة (AST)؟
قبل أن يتمكن محرّك JavaScript أو أداة فحص (linter) أو أداة تجميع (bundler) من فعل أي شيء بشيفرتك، يحلّل النص إلى شجرة من العقد. لكل عقدة نوع type (مثل VariableDeclaration وCallExpression وIdentifier…) وعقد أبناء محفوظة في خصائص مسمّاة. فالتعليمة total += size; تنتج عقدة ExpressionStatement تكون خاصيتها expression من النوع AssignmentExpression بالعامل +=، وطرفها الأيسر left هو المعرّف total وطرفها الأيمن right هو المعرّف size. أما الأقواس والفواصل المنقوطة والتعليقات فتختفي: تحتفظ الشجرة بالبنية المهمة فقط، ولهذا توصف بأنها مجردة.
تستخدم هذه الأداة 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: فالتعابير النمطية الحرفية تأخذ القيمة "value": null (وتحتفظ خاصيتها regex بالنمط والرايات)، وتُكتب قيم BigInt الحرفية سلاسلَ نصية، كما توصي مواصفة ESTree.
الحدود والخصوصية
تُحلَّل الشيفرة في متصفحك، ولا تُنفَّذ ولا تُرسل إلى أي مكان: فالمحلّل يقرأ النص فقط. ويقتصر الإدخال على مليون حرف. تُعرض الأشجار الكبيرة جدًا عند الطلب، دفعةً من الأبناء في كل مرة، ويمكن تنزيل ملف JSON حتى لو كان أكبر من أن يُعرض. ولأن JSX وTypeScript ليستا JavaScript قياسية، يعدّهما Acorn أخطاء صياغة.
الأسئلة الشائعة
لماذا تظهر لي رسالة «خطأ في الصياغة في السطر 1، العمود 1»؟
الشيفرة ليست JavaScript صالحة لنوع المصدر المختار. تذكر الرسالة السطر والعمود وشرح Acorn للخطأ (بالإنجليزية غالبًا). ومن الأسباب الشائعة استخدام import أو export مع اختيار سكربت Script (تقليدي)، أو وجود تعليقات أنواع TypeScript أو JSX، وهي صيغ لا يحلّلها Acorn.
ما الفرق بين Module وScript؟
تعمل الوحدات دائمًا في الوضع الصارم، وتسمح بـ import وexport وawait في المستوى الأعلى، وتمنع with والأعداد الثمانية الحرفية. أما السكربت فهو الوضع التقليدي لوسم <script>. وتسجّل الشجرة هذا الاختيار في الخاصية sourceType لعقدة Program.
هل تُنفَّذ الشيفرة؟
لا. التحليل يحوّل النص إلى بنية بيانات فقط. لا يُقيَّم أي شيء، ولا تُستدعى أي دالة، ولا يُرسل أي طلب شبكي، لذا يمكنك فحص شيفرة غير موثوقة أو حتى خبيثة بأمان.
هل تظهر التعليقات في الشجرة؟
لا. لا يربط معيار ESTree التعليقات بالعقد، فهي ليست جزءًا من الشجرة، لكن يمكنك رؤيتها في النص المصدري للعقدة ضمن لوحة العقدة المحددة.
ما إصدار JavaScript المدعوم؟
ضُبط Acorn على أحدث إصدار ECMAScript يعرفه، بما في ذلك التسلسل الاختياري، ودمج القيم الفارغة (??)، وBigInt، وحقول الأصناف وتوابعها الخاصة، وawait في المستوى الأعلى، ورايات التعابير النمطية مثل v، وغيرها من الصيغ الحديثة.
أدوات ذات صلة
- منسّق JavaScript وأداة ضغطه نسّق شيفرة JavaScript المضغوطة أو اضغطها باستخدام Terser، أو افحص صياغتها مع تحديد السطر والعمود لكل خطأ. تعمل الأداة في متصفحك فقط.
- مخطط سكة حديد للتعبيرات النمطية حوّل تعبير JavaScript النمطي إلى مخطط سكة حديد واضح يُظهر المجموعات والبدائل والحلقات والنظر الأمامي والخلفي، ثم صدّره بصيغة SVG أو PNG.
- منسّق JSON ومدقّقه أداة مجانية لتنسيق JSON والتحقق من صحته: جمّل JSON واضغطه وافحصه في متصفحك، مع تحديد أخطاء الصياغة بالسطر والعمود.