أمثلة Hooks للتنسيق — hooks-formatting

مجانًا

وصفتا Hooks لـ Claude Code تنسّقان الملف فور أن يعدّله Claude بأداة Edit: Prettier لملفات JavaScript و TypeScript، و Black لملفات Python. كل بطاقة تحدد الحدث والمطابِق والمنسّق، والتفعيل إعداد تضيفه بنفسك إلى settings.json، والسكربت الكامل لكل منهما في مجموعة أمثلة Hooks.

  • مجاني، ولا يتطلب أي دفع
  • تنزيل فوري بعد إتمام الطلب
  • مشترياتك محفوظة في حسابك

يعدّل Claude Code ملفاتك بأسلوبه، فقد يكتب سطرًا أطول مما يسمح به مشروعك، أو علامات تنصيص غير التي اعتمدها فريقك، فتمتلئ مراجعة الكود بفروق شكلية لا علاقة لها بما تغيّر فعلًا. هاتان الوصفتان تسلّمان التنسيق إلى منسّق اللغة: بعد كل تعديل ينجزه Claude بأداة Edit، يمر الملف على Prettier إن كان JavaScript أو TypeScript، وعلى Black إن كان Python. وهما من Hooks الخاصة بـ Claude Code، فلا تعملان في محادثات claude.ai.

ما في البطاقتين

كل وصفة ملف Markdown قصير داخل plugin/hooks، ترويسته تحدد متى تعمل وعلى ماذا:

  • format-javascript-files: تعمل عند الحدث PostToolUse، أي بعد انتهاء الأداة لا قبلها، ومطابِقها Edit، ولغتها bash، ومنسّقها Prettier لملفات JavaScript وTypeScript.
  • format-python-files: الحدث والمطابِق واللغة نفسها، ومنسّقها Black لملفات Python.

نقلتُ الملفين دون تعديل. في هذه النسخة تصف البطاقتان الوصفة ولا تتضمنان نص السكربت، وخانة المتطلبات فيهما لا تذكر أي أداة. النسخة الكاملة من الاثنتين، بالسكربت والمتطلبات، تجدها في مجموعة أمثلة Hooks، ومعها وصفة smart-formatting التي تجمع المنسّقين وgofmt للغة Go في Hook واحد.

مثال: إعادة تسمية دالة في ملف TypeScript

تطلب من Claude إعادة تسمية دالة في src/utils/date.ts فيعدّل الملف بأداة Edit. عندها يطلق Claude Code حدث PostToolUse ويمرر إلى الـ Hook بيانات الأداة بصيغة JSON، ومنها مسار الملف في الحقل tool_input.file_path. يقرأ السكربت الكامل هذا المسار بأداة jq، ولأن الامتداد ts ضمن قائمته (js وjsx وts وtsx وmjs وcjs) يشغّل الأمر npx prettier --write على هذا الملف وحده، فيُعاد تنسيقه بحسب ملف إعدادات Prettier في مشروعك إن وُجد. وفي ملف مثل app/models.py يصبح الأمر python3 -m black.

التركيب في ثلاث خطوات

  • جهّز الأدوات: Node.js لتشغيل Prettier عبر npx، أو Black بالأمر pip install black، ومعهما jq لقراءة بيانات الحدث.
  • في .claude/settings.json داخل مشروعك، أو في ~/.claude/settings.json ليشمل كل مشروعاتك، أضف تحت المفتاح hooks الحدث PostToolUse بالمطابِق Edit، وأمرًا من النوع command يقرأ المسار ويشغّل المنسّق المناسب لامتداده.
  • اكتب /hooks داخل Claude Code لتتأكد أن الإعداد سُجّل، ثم اطلب تعديلًا صغيرًا على ملف غير منسّق وقارن النتيجة.

أرفقتُ في الحزمة دليلًا عربيًا قصيرًا بخطوات البداية، مع رابط توثيق Hooks الرسمي لصيغة الإعداد الكاملة.

قبل أن تفعّلها

  • مجلد plugin لا يضم ملف hooks.json، فتثبيته كإضافة لا يفعّل أي تنسيق، والإعداد اليدوي في settings.json هو ما يشغّل الوصفتين.
  • أداة Write، التي ينشئ بها Claude ملفًا جديدًا أو يعيد كتابته كاملًا، خارج المطابِق Edit؛ اكتب Edit|Write إن أردت أن يشملها التنسيق.
  • يعيد Prettier وBlack تنسيق الملف كله لا السطر المعدَّل وحده، فأول تعديل على ملف قديم غير منسّق قد يأتي بفرق كبير في git. نسّق المشروع مرة واحدة في commit مستقل قبل التفعيل.
  • يُخفي السكربت الكامل أخطاء المنسّق وينتهي بـ || true، فإن تعذّر تشغيل المنسّق، كأن يكون Black غير مثبت أو Node.js غير موجود، يمر التعديل دون تنسيق ودون أي رسالة. وعلى ويندوز قد لا يعمل الأمر python3، فاستبدله بـ python.
  • ملفات JSON وCSS خارج قائمة امتدادات وصفة JavaScript، فلا يمسها Prettier هنا.

الترخيص MIT، والحقوق لـ davepoon ومجتمع BuildWithClaude.