أطلقت Meta الإصدار 1.0 من أداة Pyrefly، وهي أداة لفحص شيفرة Python والتحقق من الأنواع، وتستند إلى لغة Rust بهدف تحقيق أداء أعلى واستهلاك أقل للذاكرة. وتأتي هذه الخطوة في وقت يزداد فيه ازدحام منظومة أدوات Python الخاصة بالكشف عن الأخطاء والتحقق من جودة الشيفرة، مع وجود أسماء راسخة مثل Pyright وMypy إلى جانب أدوات جديدة تحاول فرض نفسها على المطورين.
وتسعى Pyrefly إلى التميز عبر الجمع بين السرعة والقدرات المتقدمة. فإلى جانب دورها التقليدي كأداة للتحقق من الأخطاء، تقدم مجموعة من الميزات التي تستهدف فرق التطوير التي تعمل على قواعد شيفرة كبيرة أو على مشاريع تحتاج إلى تحسين تدريجي في جودة الأنواع والتوافق مع معايير الكتابة الحديثة.
تثبيت بسيط وإعداد مرن
يمكن تثبيت Pyrefly داخل بيئة Python المعتادة باستخدام مدير الحزم التقليدي، من دون الحاجة إلى مكونات إضافية. كما توفر Meta امتداداً لمحرر VS Code، ما يتيح للمطورين الاستفادة من الأداة مباشرة داخل بيئة التحرير. ومع ذلك، فإن الامتداد لا يمنح كل قدرات سطر الأوامر التي تتوفر عند تثبيت الأداة داخل مشروع يعمل داخل بيئة افتراضية.
وتبدأ Pyrefly في العمل فوراً حتى من دون إعدادات خاصة. وعندما لا تجد إعداداً مرتبطاً بالمشروع، فإنها تكتفي بالإبلاغ عن المشكلات الأكثر وضوحاً مثل أخطاء الصياغة والأسماء غير المعروفة. أما إذا أراد الفريق توسيع نطاق الفحص، فيمكنه إضافة قسم خاص بالأداة داخل ملف pyproject.toml أو إنشاء ملف pyrefly.toml وتحديد السلوك المطلوب.
وتدعم الأداة أيضاً أمر pyrefly init الذي ينشئ إعدادات أولية للمستودع بشكل آلي، بما في ذلك استيراد بعض الإعدادات السابقة من Pyrefly أو من أدوات أخرى مثل Mypy وPyright. وبشكل افتراضي، تعتمد الأداة نمطاً واسعاً لالتقاط ملفات Python، مع تجاهل مسارات الحزم المثبتة داخل البيئة الافتراضية لتفادي آلاف الأخطاء غير المهمة.
ميزات تساعد على تقليل ضوضاء الأخطاء
من أبرز التحديات في أدوات التحقق الثابت هو كثرة التحذيرات، خاصة عند تشغيلها على مشاريع قديمة أو كبيرة. ولهذا تقدم Pyrefly آليات للتعامل مع هذا العبء، منها التعليقات الخاصة بالإخفاء المؤقت للأخطاء. ويمكن للمطورين استخدام أوامر مخصّصة لتوليد هذه الإشارات أو إزالة غير الضروري منها.
ومن المزايا اللافتة أن التعليقات التوضيحية الخاصة بتجاوز الأخطاء يمكن وضعها في السطر السابق للسطر المسبب للمشكلة، وليس فقط في نهاية السطر نفسه. كما يمكن إخفاء أخطاء وحدة كاملة من خلال توجيه واحد في أعلى الملف، رغم أن النهج الأكثر تنظيماً يبقى في معالجة كل حالة بشكل منفصل.
وتتضمن Pyrefly أيضاً ميزة تجريبية تسمى baseline files، وهي تعتمد على ملف JSON يلتقط الأخطاء الموجودة حالياً في المشروع. وبذلك لا تظهر إلا الأخطاء الجديدة عند تنفيذ الفحص لاحقاً. وتُعد هذه الطريقة مفيدة جداً أثناء إعادة هيكلة المشاريع، لأنها تسمح للفِرق بفصل المشكلات القديمة عن التغييرات الجديدة.
تلميحات ذكية وتكامل مع أطر العمل الشائعة
عند استخدامها داخل VS Code، يمكن لـPyrefly عرض تلميحات مضمّنة عن الأنواع المتوقعة في المواضع التي لا تتوفر فيها تعليقات نوعية كافية، إذا استطاعت الأداة استنتاجها من الشيفرة. ويمكن إدراج هذه التلميحات يدوياً أو نشرها على مستوى المشروع بأمر مخصص، وهو ما يقلل الجهد المطلوب لإضافة التوصيفات النوعية إلى الكود.
وتوسّع Pyrefly نطاقها أيضاً من خلال دعم مباشر لبعض الحزم الشائعة. فهي تقدم دعماً لتحليل Django وORM الخاص به، بما في ذلك النماذج والعلاقات والواجهات العامة القائمة على الأصناف. كما توفر دعماً لمكتبة Pydantic، بما يشمل الحقول والـdataclasses ومنطق التحقق أثناء التشغيل، مع مراعاة أنماط التحقق المرنة أو الصارمة بحسب حاجة المشروع.
ومن بين القدرات التجريبية الأخرى، يمكن استخدام Pyrefly لإنشاء تقارير عن مدى تغطية الأنواع داخل قاعدة الشيفرة، أو توليد ملفات stub اعتماداً على التحليل الثابت بدلاً من التشغيل الفعلي. كما تمتد بعض التجارب إلى عالم PyTorch، عبر دعم توصيف أشكال الـtensor والتحقق من تحولاتها داخل المسار البرمجي، وهي ميزة لا تزال خاصة بالأداة نفسها ولا تستند إلى معيار موحد حتى الآن.
مقارنة مع Pyright وMypy
تحتل Pyright وMypy موقعاً مركزياً في منظومة Python منذ سنوات، لكن Pyrefly تدخل هذا المجال من زاوية مختلفة. Pyright يحظى بانتشار واسع بين مستخدمي VS Code، بينما يتميز Mypy بمرونة جيدة مع قواعد الشيفرة الأقدم وبقدرات تمديد معروفة لدى المجتمع. أما Pyrefly فتركز على مقاربة مستقبلية أقل ارتباطاً بقيود المشاريع القديمة.
ومن الناحية التقنية، تشترك Pyrefly وPyright في تبني أسلوب استنتاج واسع للأنواع، في حين أن Mypy يتعامل بحذر أكبر مع الشيفرة غير المشروحة بنوع واضح. كما تختلف الأدوات أيضاً من حيث الترخيص؛ فـPyrefly وMypy يعتمدان رخصة MIT، بينما تتسم بعض مكونات منظومة Pyright بطابع مختلف، خصوصاً في ما يتعلق بامتداد Pylance المستخدم داخل VS Code.
ويمنحها اعتماد Rust أفضلية افتراضية في الأداء مقارنة بالأدوات المكتوبة بلغات أخرى، ولا سيما عند التعامل مع مشاريع كبيرة أو آلاف الملفات. وفي هذا السياق، تبدو Pyrefly أكثر نضجاً من بعض البدائل الحديثة التي لا تزال في طور التجربة، ما يجعلها خياراً جديراً بالاختبار لدى فرق التطوير التي تبحث عن التوازن بين السرعة والقدرات المتقدمة.
أداة واعدة لمشاريع تحتاج إلى توسع منظم
رغم أن عدداً من خصائص Pyrefly ما يزال تجريبياً، فإن النسخة 1.0 تشير إلى أن الأداة خرجت من مرحلة الاكتشاف المبكر إلى مستوى يسمح بتجربتها بجدية داخل المشاريع الفعلية. وهي قد تكون مناسبة بشكل خاص للفرق التي ترغب في تحسين جودة الأنواع تدريجياً، أو التي تعمل على إعادة هيكلة قواعد شيفرة معقدة من دون تعطيل سير العمل اليومي.
وبالنسبة للمطورين الذين يبحثون عن بديل سريع وحديث في عالم التحقق الثابت لشيفرة Python، تقدم Pyrefly مزيجاً واضحاً من الأداء والمرونة والتكاملات المتخصصة. ومع استمرار تطورها، قد تصبح واحدة من الأدوات الأساسية في بيئات Python التي تركز على الدقة وقابلية الصيانة على المدى الطويل.