ast-grep(sg) هي أداة CLI للبحث الهيكلي للكود والوبر وإعادة الكتابة.
ast-grep هي أداة تعتمد على AST للبحث عن التعليمات البرمجية حسب رمز النمط. فكر في الأمر كصديقك القديم grep
، ولكن قم بمطابقة عقد AST بدلاً من النص. يمكنك كتابة الأنماط كما لو كنت تكتب تعليمات برمجية عادية. سوف يتطابق مع جميع التعليمات البرمجية التي لها نفس البنية النحوية. يمكنك استخدام علامة $
+ الأحرف الكبيرة كحرف بدل، على سبيل المثال $MATCH
، لمطابقة أي عقدة AST واحدة. فكر في الأمر كنقطة REGEX .
، إلا أنها ليست نصية.
جرب الملعب عبر الإنترنت لتذوق!
رؤية المزيد من لقطات الشاشة على الموقع.
يمكنك تثبيته من npm أو pip أو cargo أو homebrew أو scoop أو MacPorts!
npm install --global @ast-grep/cli
pip install ast-grep-cli
cargo install ast-grep --locked
# install via homebrew, thank @henryhchchc
brew install ast-grep
# install via scoop, thank @brian6932
scoop install main/ast-grep
# install via MacPorts
sudo port install ast-grep
أو يمكنك إنشاء ast-grep من المصدر. تحتاج إلى تثبيت Rustup، واستنساخ المستودع وبعد ذلك
cargo install --path ./crates/cli --locked
الحزم متاحة على منصات أخرى أيضًا.
ast-grep لديه النموذج التالي.
sg --pattern 'var code = $PATTERN' --rewrite 'let code = new $PATTERN' --lang ts
sg -p ' $A && $A() ' -l ts -r ' $A?.() '
sg -p ' new Zodios($URL, $CONF as const,) ' -l ts -r ' new Zodios($URL, $CONF) ' -i
إذا وجدت ast-grep مثيرًا للاهتمام ومفيدًا لعملك، فيرجى شراء قهوة لي حتى أتمكن من قضاء المزيد من الوقت في المشروع!
جوهر ast-grep هو خوارزمية للبحث عن التعليمات البرمجية واستبدالها استنادًا إلى شجرة بناء الجملة المجردة التي تنتجها Tree-Sitter. يمكن أن يساعدك في إجراء تحليل ثابت خفيف الوزن ومعالجة الأكواد واسعة النطاق بطريقة بديهية.
النقاط الرئيسية:
نمط بديهي لإيجاد واستبدال AST. يبدو نمط ast-grep مثل الكود العادي الذي ستكتبه كل يوم (يمكنك القول أن النمط متماثل في الكود).
jQuery مثل API لاجتياز ومعالجة AST.
تكوين YAML لكتابة قواعد فحص جديدة أو تعديل التعليمات البرمجية.
مكتوب بلغة مجمعة، مع تحليل قائم على جليسة الأشجار واستخدام نوى متعددة.
واجهة سطر الأوامر جميلة :)
تتمثل رؤية ast-grep في إضفاء الطابع الديمقراطي على سحر شجرة بناء الجملة المجرد وتحريره من برمجة AST المرهقة!