ملعب | البرنامج التعليمي | المستندات
GritQL هي لغة استعلام تعريفية للبحث عن كود المصدر وتعديله.
اقرأ الوثائق أو البرنامج التعليمي التفاعلي أو قم بتشغيل grit --help
.
تثبيت Grit CLI:
curl -fsSL https://docs.grit.io/install | bash
ابحث عن جميع مكالمات console.log
الخاصة بك عن طريق وضع النمط المطلوب في علامات الظهر:
grit apply '`console.log($_)`'
استبدل console.log
بـ winston.log
، باستخدام =>
لإنشاء عمليات إعادة الكتابة:
grit apply '`console.log($msg)` => `winston.log($msg)`'
احفظ النموذج في ملف grit.yaml
واستثني حالات الاختبار في عبارة Where:
cat << 'EOF' > .grit/grit.yaml
patterns:
- name: use_winston
level: error
body: |
`console.log($msg)` => `winston.log($msg)` where {
$msg <: not within or { `it($_, $_)`, `test($_, $_)`, `describe($_, $_)` }
}
EOF
grit apply use_winston
قم بتشغيل grit check
لفرض أنماطك كخطوط مخصصة.
grit check
console.log
، إلا إذا كانت داخل كتلة محاولة الالتقاط `console.log($log)` => . where {
$log <: not within `try { $_ } catch { $_ }`
}
`$instance.oldMethod($args)` => `$instance.newMethod($args)` where {
$program <: contains `$instance = new TargetClass($_)`
}
يمكن العثور على العديد من الأمثلة في مكتبة GritQL القياسية.
يمكن دمج الأنماط لإنشاء استعلامات معقدة، بما في ذلك عمليات إعادة البناء الكبيرة.
تأتي GritQL من تجاربنا في إجراء عمليات إعادة البناء والترحيل على نطاق واسع.
عادةً ما تبدأ عمليات الترحيل بعمل استكشافي لمعرفة نطاق المشكلة، وغالبًا ما يتم ذلك باستخدام عمليات بحث بسيطة عن grep. من السهل البدء بهذه الأمور، لكن معظم عمليات الترحيل تنتهي في نهاية المطاف إلى تراكم متطلبات إضافية مثل ضمان استيراد الحزم الصحيحة واستبعاد الحالات التي ليس لها مسار ترحيل قابل للتطبيق.
في نهاية المطاف، أي ترحيل معقد ينتهي به الأمر إلى أن يكون برنامجًا كاملاً لتعديل الكود مكتوبًا باستخدام أداة مثل jscodeshift. وهذا يأتي مع مشاكله الخاصة:
GritQL هي محاولتنا لتطوير حل وسط قوي:
$metavariables
للثغرات التي تريد تمثيلها.يستخدم GritQL نظام Tree-sitter لجميع محللي اللغة ويستفيد بشكل كبير من نظام Rust البيئي.
تم إصدار GritQL بموجب ترخيص MIT.
المساهمات هي موضع ترحيب. للبدء، راجع إرشادات المساهمة .
يمكنك أيضًا الانضمام إلينا على Discord .