يعتبر مشروع ruby-type-inference نهجًا جديدًا تمامًا لمعالجة مشاكل الطبيعة الديناميكية Ruby وتوفير دقة رمز أكثر موثوقية واستدلالًا نوعًا. يجمع بعض بيانات وقت التشغيل لإنشاء عقود من النوع للطرق.
في كل مرة يتم فيها استدعاء طريقة ، يتم نقل بعض الحجج الخاصة بأنواع معينة. يقوم Type Tracker بجمع جميع مجموعات الوسيطة هذه ، ثم يبني عقدًا خاصًا يرضي جميع أنواع الوسيطة التي واجهتها.
هذا النهج له إيجابيات وسلبيات خاصة به:
يعالج هذا التنفيذ مشكلة التغطية المعلنة من خلال توفير إمكانية دمج أي عقود نوع في أي وقت.
للاستخدام البسيط ، تحتاج إلى تثبيت المكون الإضافي Ruby Dynamic Code Insight لروبيمين. ثم سيتطلب هذا البرنامج المساعد أن يتم تثبيت جوهرة Arg_Scanner. انظر تعليمات التثبيت Arg_Scanner إذا كان لديك مشاكل أثناء التثبيت.
بعد ذلك ، سيكون لديك إمكانية تشغيل برامجك تحت Type Tracker:

أو يمكنك تشغيل برامجك في Terminal عبر ثنائي rubymine-type-tracker (ولكن عليك أن تبقي مشروعك مفتوحًا في Rubymine). على سبيل المثال:
rubymine-type-tracker bin/rails server
يتم تضمين ثنائي rubymine-type-tracker في جوهرة Arg_Scanner.
راجع الميزات.
Arg_scanner عبارة عن جوهرة ذات امتداد أصلي لإرفاقها بعمليات Ruby وتتبع واعتراض جميع مكالمات الطريقة لتسجيل تدفق البيانات نوعًا في وقت التشغيل.
انظر وثائق arg_scanner للحصول على تفاصيل حول الاستخدام.
يستمع خادم معالج Type Contract لبيانات النوع الوارد (من arg_scanner ) ويقوم بمعالجته إلى تنسيق مضغوط.
يمكن استخدام البيانات المخزنة لاحقًا لتحليل رمز أفضل ويمكن مشاركتها أيضًا مع المستخدمين الآخرين.
يقوم عملاء تحليل التعليمات البرمجية (المكون الإضافي Rubymine/IJ+Ruby) باستخدام بيانات العقد لتوفير ميزات للمستخدمين مثل إكمال التعليمات البرمجية ، ودقة أفضل ، إلخ.
( TODO ) يتلقى Signature Server عقودًا مجهول الهوية من المستخدمين ويوفر مجموعات عقود مجمعة للأحجار الكريمة الشهيرة.
يتم استخدام جوهرة arg_scanner لجمع معلومات النوع. يمكن تثبيته يدويًا على SDK المستهدف ويتطلب التصوير بالرنين المغناطيسي على الأقل 2.3.
هناك احتمالان لاستخدام Type Tracker: (1) باستخدام المكون الإضافي IJ/Rubymine أو (2) يتطلب ذلك من رمز الياقوت.
أسهل طريقة لتشغيل المكون الإضافي (والأكثر ملاءمة لتطويره) هي تشغيله بمهمة خاصة بالتجاري ضد IJ Ultimate Snapshot:
./gradlew ide-plugin:runIde
ستعمل المهمة على تجميع المكون الإضافي ، وقم بتشغيل IJ Ultimate باستخدام المكون الإضافي "المثبت" فيه. ليست هناك حاجة في تشغيل أي شيء يدويًا في هذه الحالة.
إذا كنت ترغب في تجربتها باستخدام مثيل Rubymine الموجود ، فيجب عليك:
./gradlew ide-plugin:buildPluginFile | Settings | Plugins | Install plugin from disk...ide-plugin/build/distributions واختيار.لاحظ أنه بسبب تغييرات API ، قد يكون المكون الإضافي غير متوافق مع مثيلات RM الأقدم.
من أجل جمع البيانات الخاصة بالبرنامج النصي ، يحتاج إلى تشغيل خادم التعاقد ؛ يمكن تشغيله عن طريق الجري
./gradlew contract-creator:runServer --args path-to-db.mv.db عندما يكون path-to-db.mv.db هو المسار حيث سيتم تخزين عقود النوع (ملف قاعدة بيانات H2).
قم بتشغيل البرنامج النصي Ruby لتتم معالجته عبر arg-scanner Binary.
استخدم البيانات التي تم جمعها بواسطة خادم العقد.
أي نوع من الأفكار وحالات الاستخدام والمساهمات والأسئلة موضع ترحيب للغاية لأن المشروع هو مجرد احتضان. لا تتردد في إنشاء مشكلات لأي طلب معقول.