Fallow: أداة ذكاء الأكواد التي يحتاجها كل مستخدم لـ Claude
BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00هذا هو Fallo، أداة ذكاء برمجية لـ TypeScript وJavaScript تحلل كامل الكود الخاص بك بحثاً عن الكود المهمل، والتكرار، والتعقيد غير الضروري، وغير ذلك الكثير.
00:00:10مما يعني أنه لا حاجة لاستخدام مزيج من NIP وJSC وPD وESLint فقط لمنع وكلائك من شحن كود سيء.
00:00:17لقد تم بناؤه بلغة Rust ويدعم أكثر من 90 إضافة، مما يعني أنه سيعمل مباشرة مع معظم أطر العمل والحزم الشهيرة.
00:00:23لكن حقيقة أنه يدعم JavaScript وTypeScript فقط تجعله أقل جاذبية للمبرمجين الذين يستعينون بالذكاء الاصطناعي.
00:00:29اضغط على زر الاشتراك ولنكتشف ذلك.
00:00:30إليكم مشروعاً أعمل عليه يضيف مظهراً سينمائياً للأفلام على الفيديوهات والصور.
00:00:39لقد تم بناؤه غالباً باستخدام Claude Code، لذا سيكون به مستوى معين من لمسات الذكاء الاصطناعي.
00:00:43هناك أيضاً طلب سحب (PR) هنا لميزة جديدة في ذلك المشروع، والتي سأتحدث عنها لاحقاً، طالما أن GitHub لم يخفِها بالخطأ.
00:00:51للبدء، سأقوم بتشغيل Fallo مع علامة الملخص (summary) باستخدام BunX، مما يعني أنني لست مضطراً لتثبيته.
00:00:56وهذا يعطي لقطة لمشروعي، تظهر ملخص الكود المهمل، والتكرار، وملخصاً لصحة التعقيد.
00:01:02وإذا تحققنا من حالة git، نجد أنه يضيف مجلداً جديداً باسم fallo. يحتوي على التخزين المؤقت.
00:01:07هذا يعني أن عمليات التشغيل اللاحقة لهذا الأمر ستكون أسرع وتحتوي على اللقطات وأي معلومات عن الإضافات.
00:01:12الآن، ربما لاحظتم هنا أن مستوى الصحة هو 41 فوق الحد المسموح به.
00:01:16ماذا يعني ذلك؟
00:01:17حسناً، يتم حساب درجة صحة Fallo عن طريق حساب التعقيد الدوري (cyclomatic) والتعقيد المعرفي.
00:01:24ويستخدم بعض المعادلات لحساب كثافة التعقيد.
00:01:27وهنا في الأسفل، يُستخدم كل هذا لمعرفة مؤشر قابلية الصيانة، وهي الدرجة التي نراها هنا.
00:01:33بناءً على هذه الدرجة، اكتشف أن 41 من ملفاتي تحتاج إلى إعادة صياغة (refactoring).
00:01:38من هنا، يمكننا تشغيل أي من هذه الأوامر للحصول على تقرير أكثر تفصيلاً حول منطقة محددة.
00:01:43لذا، إذا أردت التركيز على الصحة، يمكننا تشغيل هذا الأمر.
00:01:46وبعد فترة، يسرد جميع الملفات التي تعاني من مشكلات صحية مختلفة.
00:01:49ملاحظة، إذا كنت تريد معرفة ما يرمز إليه CRAP، فهو اختصار لـ "أنماط مضادة لمخاطر التغيير"،
00:01:55والتي يمكنك تعلم كل شيء عنها في التوثيق.
00:01:57لكن هذا المستوى من التفاصيل سهل جداً على الوكيل (agent) اتباعه ومعرفة ما يجب إصلاحه.
00:02:00في الواقع، أود أن أقول إن التكرار أسهل بكثير في المتابعة لأنه يعطي الملف الدقيق وأرقام الأسطر المحددة.
00:02:06لذا سنلتزم بذلك في الوقت الحالي.
00:02:07وإذا أردنا، يمكننا إضافة ملف تكوين fallo لتزويد الأداة بمعلومات حول أنماط معينة أو تبعيات تريد تجاهلها،
00:02:14بالإضافة إلى ضبط بعض إعدادات التكرار المخصصة، وإعدادات الصحة وإضافة الحدود،
00:02:18وهي طريقة رائعة جداً للتصريح بالمجلدات التي يمكنها الاستيراد من مجلدات أخرى.
00:02:23لكن كل هذا معقد للغاية بالنسبة لاحتياجاتي، لذا سنلتزم بالإعدادات الافتراضية حالياً.
00:02:27الآن من هنا، يمكننا تشغيل أمر fallo fix أو إضافة علامة التشغيل التجريبي (dry run) لرؤية ما سيفعله بالضبط،
00:02:32وهو محاولة معالجة جميع أنواع المشكلات القابلة للإصلاح.
00:02:35ويمكنكم أن تروا هنا أنه سيقوم بإزالة مجموعة من عمليات التصدير (exports).
00:02:38لكنني في الواقع لا أثق في fallo لتشغيل إصلاح تلقائي لأنه لا يملك سياقاً كبيراً عن الكود الخاص بي،
00:02:43وما تفعله كل وظيفة وكيف يعمل كل شيء معاً.
00:02:46لذا بدلاً من استخدام علامة الإصلاح، سأقوم بربط fallo بالوكيل الخاص بي،
00:02:49وهو ما يمكنك فعله باستخدام خادم MCP أو باستخدام إضافة VS code، والتي أعتقد أنها ستعمل مع cursor.
00:02:55لكنني سأبقي الأمور بسيطة وسأقوم فقط بتثبيت مهارة (skill) fallo، التي تحتوي على بعض الحواجز الوقائية وقواعد الوكيل وبعض الأخطاء الشائعة.
00:03:03بمجرد تثبيت المهارة، سأقوم بتشغيل Claude Code وسأعطيه أمراً بدراسة هذا المشروع لفهم كيفية عمل الكود،
00:03:10ثم تشغيل fallo للتعامل مع الكود المكرر، مع التأكد من أن إزالته لا تكسر الوظائف الأساسية.
00:03:16وعند الانتهاء، ضع التغييرات في فرع ميزات (feature branch) وقم بتشغيل الاختبارات للتأكد من أن التطبيق يعمل كما هو متوقع.
00:03:22يمكننا أن نرى هنا أنه يقوم بتحميل مهارة fallo.
00:03:24ثم يقوم بتشغيل أمر fallo dupes ويحصل على التنسيق لتصدير JSON، وهو تنسيق صديق للآلة.
00:03:29وبعد حوالي أربع دقائق، انتهى Claude من إصلاح ثلاثة ملفات بدلاً من جميع الملفات التي اقترحها fallo،
00:03:34بشكل أساسي لأن الملفات الأخرى هي ملفات اختبار، والتي يفترض أحياناً أن تحتوي على كود مكرر.
00:03:39طلبت منه أيضاً إنشاء طلب سحب (PR)، وإذا نظرنا إليه، فقد أضاف 54 سطراً من الكود وأزال 43 سطراً.
00:03:46ولكن هذا لأنني طلبت منه إضافة ملف تكوين fallo، وهو حوالي 20 سطراً لتجاهل جميع ملفات الاختبار في التقارير المستقبلية.
00:03:54وبالطبع، يجب أن نستمر في هذا النهج باستخدام Claude Code أو أي وكيل آخر لإصلاح مشكلات التعقيد أو أي كود مهمل.
00:04:00لكن fallo يمكنه أيضاً مراجعة طلبات السحب (PRs).
00:04:02لذا إذا نظرنا إلى طلب السحب هذا الذي عرضته لكم سابقاً، فإن تشغيل أمر fallo audit سيفحص أي مشكلات في هذا الفرع مقابل الفرع الرئيسي حتى نتمكن من إصلاح مشكلات محددة فقط.
00:04:12وإذا أردنا بناءه بناءً على فرع مختلف، يمكننا فقط استخدام علامة الأساس (base).
00:04:16ولكن إذا لم نرغب أيضاً في توجيه الأوامر لـ Claude مراراً وتكراراً في كل مرة لاستخدام fallo، فيمكننا تشغيل أمر إعداد الخطافات (hooks)، والذي سينشئ بعض خطافات Claude Code لـ fallo.
00:04:24يمكن لـ Fallo أيضاً العمل كإجراء GitHub (GitHub action) مع تعليقات توضيحية على طلب السحب.
00:04:28وهو يدعم مساحات العمل (workspaces).
00:04:30ويمكنه تصدير شارات الصحة ويدعم الخطوط الأساسية (baselines)، مما يعني إمكانية إصلاح المشكلات الحالية بمرور الوقت.
00:04:35ولا يلتقط CI إلا المشكلات الجديدة، وهو أمر رائع لإصلاح مشروع كبير به الكثير من المشكلات.
00:04:41إنه يحتوي أساساً على الكثير من الميزات، لكن جميعها تقريباً هي تحليل كود ثابت، مما يعني أنه لا ينفذ وظائفك فعلياً.
00:04:49إذا كنت تريد شيئاً يفعل ذلك، فإن fallo يدعم شيئاً يسمى ذكاء وقت التشغيل لإخبارك بالوظائف التي يتم تفعيلها عندما يواجه تطبيقك حركة مرور حقيقية في الإنتاج.
00:04:59يقوم بذلك باستخدام تغطية وقت تشغيل V8، ويدمج النتائج في تقرير صحي موجود من خلال تطبيق جانبي (sidecar) يمكن تشغيله محلياً أو نشره في أي مكان تريده.
00:05:08لكن هذه بالطبع ميزة مدفوعة، وهو أمر منطقي نوعاً ما.
00:05:11بشكل عام، fallo أداة رائعة سأستخدمها أكثر بكثير، على الرغم من أنني أعتقد أنها تحتوي على ميزات كثيرة وتدعم فقط بيئة JavaScript.
00:05:19رغم أن اللغات الأخرى لها أدواتها الخاصة، إلا أنني لست متأكداً من أنها تجمع كل شيء معاً كما يفعل fallo، وأعتقد أن منشئه Bart قام بعمل جيد في إنشاء هذه الأداة، التي تستخدم في الواقع OXC للتحليل الدلالي وحل الوحدات (module resolution) قبل بدء التحليل المستند إلى الرسم البياني.
00:05:36لذا أساساً، لن يترك لغة JavaScript أبداً، وأنا متأكد من أن هذا يسعد Evan You كثيراً، ليس بسبب جزء JavaScript، بل بسبب جزء OXC، لأنها أداة يمولها من خلال void zero.
00:05:46وبالحديث عن Evan You، إذا أردت سماعنا ونحن نستجوبه حول void zero وVite، وما إذا كانت مكونات خادم React فكرة جيدة وكل ما بينهما، فشاهد هذا الفيديو، وهو بودكاست مدته ساعة، وأعتقد أنه من المفضلات لدي من بين ما قدمناه.