Utilia

مستكشف شجرة AST لـ JavaScript

الصق شيفرة JavaScript واستكشف شجرة الصياغة المجردة (ESTree عبر Acorn) في متصفحك، مع ربط العقد بالشيفرة وتصدير الشجرة بصيغة JSON.

نوع المصدر
العُقد
–
أقصى عمق
–
تعليمات المستوى الأعلى
–
شجرة الصياغة

انقر عقدة لتحديد شيفرتها. انقر في الشيفرة أو حرّك المؤشر فيها للعثور على عقدتها.

    العقدة المحددة

    حدّد عقدة في الشجرة أو انقر في الشيفرة.

    ESTree JSON

    كيفية استكشاف شجرة AST لشيفرة JavaScript

    1. الصق شيفرتك في حقل شيفرة JavaScript، أو انقر تحميل المثال لتبدأ بوحدة صغيرة جاهزة.
    2. اختر نوع المصدر: وحدة Module (import/export، الوضع الصارم) لوحدات ES، أو سكربت Script (تقليدي) للسكربتات العادية التي قد تستخدم ميزات الوضع غير الصارم مثل with.
    3. تتحدّث الشجرة بعد لحظة من توقفك عن الكتابة. انقر تحليل لتشغيل التحليل فورًا.
    4. في شجرة الصياغة، انقر السهم الصغير لتوسيع العقدة أو طيّها. وانقر اسم العقدة لتحديد الشيفرة المقابلة لها في المحرر؛ فتعرض لوحة العقدة المحددة نوعها، والخاصية التي تنتمي إليها، ونطاق أحرفها، وسطرها وعمودها، وخصائصها البسيطة (الاسم، والعامل، والقيمة الخام…) ونصها المصدري.
    5. ويعمل الربط في الاتجاه المعاكس أيضًا: انقر في أي مكان من الشيفرة، أو حرّك المؤشر بلوحة المفاتيح، أو حدّد جزءًا منها، فتُوسَّع أعمق عقدة تحتويه وتُبرز في الشجرة.
    6. افتح 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، وغيرها من الصيغ الحديثة.