OOZOU
تواصلوا معنا
العودة إلى TIL
ruby

تشغيل rubocop قبل الـ commit

13 أكتوبر 2020

مقدمة

تُعدّ Git hooks أداة قوية جدًا لأتمتة المهام وفرض معايير كتابة الكود في مستودع Git. ومن أشهر استخداماتها تشغيل الاختبارات الآلية وأدوات تحليل الكود قبل السماح بإتمام الـ commit. نتناول في هذا المقال الـ pre-commit hooks، وكيفية تخطيها، وكيفية إعداد pre-commit hook لتشغيل Rubocop، وهي أداة لتحليل كود Ruby.

ما هي Rubocop؟

Rubocop أداة تحليل ثابت للكود في Ruby تفحص الكود بحثًا عن مشكلات الأسلوب والأمان. وهي أداة شائعة بين مطوّري Ruby لضمان التزام الكود بدليل أسلوب Ruby وأفضل الممارسات. يمكنكم تشغيل Rubocop يدويًا، لكن دمجها مع pre-commit hook يضمن فحص الكود تلقائيًا قبل كل commit.

انسخوا ما يلي إلى .git/hooks/pre-commit (احذفوا .sample)

#!/usr/bin/env ruby

require 'english'
require 'rubocop'

ADDED_OR_MODIFIED = /A|AM|^M/.freeze

changed_files = `git status --porcelain`.split(/\n/).
    select { |file_name_with_status|
      file_name_with_status =~ ADDED_OR_MODIFIED
    }.
    map { |file_name_with_status|
      file_name_with_status.split(' ')[1]
    }.
    select { |file_name|
      File.extname(file_name) == '.rb'
    }.join(' ')

system("rubocop #{changed_files}") unless changed_files.empty?

exit $CHILD_STATUS.exitstatus

اجعلوا الملف قابلًا للتنفيذ

$ chmod +x .git/hooks/pre-commit

أصبحتم جاهزين. من الآن فصاعدًا ستعمل rubocop على تغييراتكم وستمنع الـ commit ما لم تصلحوا المخالفات.

كيف تتخطون الـ pre-commit؟ يكفي أن تمرّروا الخيار -n إلى git commit

$ git commit -n -m "[hotfix] blah blah"

ما هو الـ Pre-Commit Hook؟

الـ pre-commit hook هو Git hook يعمل على جهاز المطوّر قبل إنشاء الـ commit. وهو سكربت يمكنه القيام بمهام متعددة مثل تشغيل الاختبارات الآلية أو فحص أسلوب الكود أو فرض معايير الكتابة. وإذا فشل الـ pre-commit hook يُلغى الـ commit، وعليكم إصلاح المشكلات قبل إعادة المحاولة.

لماذا تشغّلون Rubocop قبل الـ Commit

لتشغيل Rubocop قبل الـ commit مزايا عدة:

  • جودة الكود: تفحص Rubocop الكود بحثًا عن مشكلات الأسلوب والأمان، فتبقى قاعدة الكود متسقة وآمنة.
  • توفير الوقت: بتشغيل Rubocop تلقائيًا قبل الـ commit تكتشفون المشكلات مبكرًا وتتجنبون إضاعة الوقت في تصحيح الأخطاء لاحقًا.
  • التعاون: بفرض معايير الكتابة تعزّز الـ pre-commit hooks التعاون والاتساق بين أعضاء الفريق.

كيفية إعداد pre-commit hook

  1. ثبّتوا Rubocop وأداة الـ pre-commit hook التي تفضّلونها (مثل Husky أو Pre-commit).
  2. أنشئوا ملفًا جديدًا باسم pre-commit في المجلد .git/hooks.
  3. أضيفوا أمر Rubocop إلى ملف pre-commit، مثل rubocop -a.
  4. اجعلوا ملف pre-commit قابلًا للتنفيذ بتشغيل chmod +x .git/hooks/pre-commit.
  5. اختبروا الـ pre-commit hook بتشغيل git commit -m “Test commit”

ملاحظة: إذا أردتم تخطي الـ pre-commit hook مؤقتًا، يمكنكم استخدام الخيار --no-verify مع الأمر git commit، مثل git commit -m “Test commit” --no-verify.

المزيد حول ruby

ruby30 أبريل 2021

السماح بلصق كتل Ruby متعددة الأسطر في Pry عند استخدام النقطة في بداية السطر

أصبحنا نستخدم أسلوب النقطة في بداية السطر كثيرًا الآن، مثلًا

ruby14 أكتوبر 2020

Heredoc بدون استيفاء

أحيانًا تحتاجون إلى استخدام Heredoc في Ruby بدون استيفاء ('#{....}'). يمكنكم تحقيق ذلك بإحاطة الكلمة المفتاحية بعلامتي اقتباس مفردتين:

ruby13 أكتوبر 2020

إنشاء جداول التجزئة الوسيطة تلقائيًا في Ruby

ستُنشأ جميع جداول التجزئة في المستويات الوسيطة تلقائيًا وكأنها بالسحر

هل لديكم فكرة مشروع؟

يسعدنا أن نتعرّف على ما تبنونه.

ابدأوا المحادثةhello@oozou.com
OOZOU Logo

بانكوك · سنغافورة · هونغ كونغ

X
Facebook
Instagram
LinkedIn
OOZOU Co., Ltd.
548 One City Centre
Ploenchit Road
Bangkok 10330
Thailand
+66 2544 0000
hello@oozou.com

الخدمات

  • تطوير الويب
  • وكلاء الذكاء الاصطناعي والذكاء الاصطناعي التوليدي
  • تطوير تطبيقات الجوال
  • تحليلات البيانات وهندستها
  • تصميم تجربة المستخدم وواجهته (UX/UI) وتصميم المنتجات
  • التحوّل الرقمي

الشركة

  • من نحن
  • الوظائف
  • المدونة
  • دراسات الحالة
  • عروض حية
  • تعلّمت اليوم
  • تواصل معنا

المزيد

  • القطاعات
  • شبكة الشركاء
© 2026 OOZOU. جميع الحقوق محفوظة.
سياسة الخصوصيةمدونة قواعد السلوكسياسة مكافحة الرشوة والفساد