يستخدم Discourse lefthook لخطافات git، و bin/lint كنقطة إدخال واجهة سطر الأوامر الرئيسية لتشغيل نفس عمليات التحقق يدويًا.
إذا كنت تعمل في استنساخ محلي، فقم بتثبيت الخطافات مرة واحدة:
pnpm install
pnpm lefthook install
بعد ذلك، سيتم فحص الملفات المعدة تلقائيًا عند git commit.
الأمر الرئيسي: bin/lint
استخدم bin/lint عندما تريد تشغيل أدوات التحليل المتوافقة مع المستودع بنفسك بدلاً من انتظار خطاف ما قبل الالتزام (pre-commit hook).
أمثلة شائعة:
bin/lint
bin/lint path/to/file.rb path/to/file.gjs
bin/lint --recent
bin/lint --staged
bin/lint --unstaged
bin/lint --wip
bin/lint --fix path/to/file.rb
bin/lint --fix --recent
bin/lint --fix
ماذا يفعل كل وضع
bin/lint: تحليل جميع الملفات المدعومة في المستودعbin/lint path/to/file ...: تحليل الملفات المحددة فقطbin/lint --recent: تحليل الملفات التي تم تغييرها في آخر 50 التزامًا، بالإضافة إلى الملفات غير المتعقبةbin/lint --staged: تحليل الملفات المعدة فقطbin/lint --unstaged: تحليل الملفات غير المعدة فقطbin/lint --wip: تحليل الملفات المعدة، والملفات غير المعدة، والملفات المتغيرة منذmainbin/lint --fix ...: تشغيل أدوات الإصلاح التلقائي للملفات المحددةbin/lint --fix: تشغيل جميع أدوات الإصلاح التلقائي المتاحة عبر المستودعbin/lint --verbose: طباعة أوامر lefthook الأساسية
عندما تمرر ملفات صريحة، يقوم bin/lint بتصفيتها إلى أنواع الملفات المدعومة القابلة للتحليل قبل استدعاء lefthook.
ملفات توثيق Markdown ليست حاليًا جزءًا من
bin/lint، لذا فإن تشغيلbin/lint path/to/doc.mdسيبلغ عن عدم وجود ملفات مطابقة للتحليل.
ما الذي يتم تحليله
التكوين الدقيق موجود في lefthook.yml. في وقت الكتابة، يغطي bin/lint ما يلي:
Ruby
**/*.{rb,rake,thor}- نصوص Ruby البرمجية تحت
bin/**/* Gemfile
عمليات التحقق:
rubocopsyntax_tree(stree check)
تنسيق JavaScript و GJS و CSS و SCSS
app/assets/stylesheets/**/*.{css,scss}frontend/**/*.{js,gjs,scss,css,cjs,mjs}- مطابقة أصول المكونات الإضافية والسمات (theme assets)
عمليات التحقق:
prettier/pprettier
تحليل JavaScript و GJS
frontend/**/*.{js,gjs}- مطابقة ملفات JS للمكونات الإضافية والسمات
عمليات التحقق:
eslint
تحليل قوالب GJS
frontend/**/*.gjs- مطابقة ملفات
.gjsللمكونات الإضافية والسمات
عمليات التحقق:
ember-template-lint
تحليل SCSS
app/assets/stylesheets/**/*.scss- مطابقة ملفات SCSS للمكونات الإضافية والسمات
عمليات التحقق:
stylelint
فحوصات YAML واللغة المحلية (locale)
**/*.{yaml,yml}باستثناءconfig/database.yml**/{client,server}.en.yml
عمليات التحقق:
yaml-lintscript/i18n_lint.rb
التحقق من النوع (Type checking)
عندما تقوم بتشغيل bin/lint بدون وسائط ملف، يتم أيضًا تشغيل تحليل المستودع الكامل:
pnpm lint:types
هذا هو فحص Glint/TypeScript لمعلومات نوع JavaScript في Discourse.
![]()
bin/lint path/to/fileوخطاف ما قبل الالتزام لا يقومان بتشغيل فحص النوع الكامل. استخدمbin/lintالعادي عندما تريد المرور الكامل لتحليل المستودع بأكمله.
ما الذي يمكن إصلاحه تلقائيًا
يمكن لـ bin/lint --fix إصلاح العديد من المشكلات تلقائيًا، ولكن ليس كلها.
يتم تكوين الإصلاح التلقائي من أجل:
prettier --writeeslint --fixember-template-lint --fixstylelint --fixrubocop -Asyntax_tree(stree write)
في الواقع، هذا يعني أن --fix يمكنه إعادة تنسيق وإعادة كتابة:
- Ruby
- JavaScript / GJS
- CSS / SCSS
عمليات التحقق لا يتم إصلاحها تلقائيًا بواسطة bin/lint --fix:
- التحقق من صحة بناء جملة YAML
- تحليل i18n لـ
client.en.yml/server.en.yml - فحص Glint/النوع
العلاقة بخطافات git
يستخدم خطاف ما قبل الالتزام نفس تكوين lefthook مثل bin/lint، ولكنه يعمل فقط على الملفات المعدة.
هذا يعني:
- قد يفشل الالتزام لأن الملفات المعدة لا تجتاز التحليل
bin/lint --stagedهو الأقرب مكافئ يدوي لخطاف ما قبل الالتزامbin/lint --fix --stagedهي طريقة جيدة لإصلاح ما أنت على وشك الالتزام به بالضبط
سير العمل العملي
للتطوير اليومي، هذه هي الأوامر الأكثر فائدة:
# قبل الالتزام ببعض الملفات المتغيرة
bin/lint --fix path/to/file1.rb path/to/file2.gjs
# تحقق بالضبط مما سيقوم خطاف ما قبل الالتزام بالتحقق منه
bin/lint --staged
# تنظيف كل العمل الجاري حاليًا
bin/lint --fix --wip
# تشغيل مجموعة أدوات تحليل المستودع الكاملة، بما في ذلك فحوصات النوع
bin/lint
يتم التحكم في إصدار هذا المستند - اقترح تغييرات على github.