كيفية الالتزام بمعايير ترميز دروبال باستخدام Git Hooks

نشرت: 2023-05-23

الكود الجيد يشبه إبداعات Lego المبنية جيدًا - فهو قوي ، ويبدو جيدًا ، ويسهل تغييره إذا احتجت إلى ذلك. تكون أهمية معايير الترميز الجيدة عالية بشكل خاص عندما تقوم بالبرمجة في فريق ، أو تعمل في مشروع قابل للتطوير ، أو تشارك في مجتمع مفتوح المصدر مثل دروبال.

كما هو الحال مع أي مشروع آخر مفتوح المصدر ، لدى دروبال آلاف المطورين الذين يعملون في المشروع. ولكل منهم مستوى خبرته الخاصة. كيف تضمن أن كل فرد في فريقك أو في المجتمع يتبع ممارسات الترميز الجيدة؟ بوابة هوكس!

Git Hooks هي طريقة سهلة وآلية للتأكد من أن التعليمات البرمجية الخاصة بك تفي دائمًا بمعايير الترميز الخاصة بدروبال. سيساعد تنفيذ معايير ترميز دروبال مع Git hook المطورين على الالتزام بالتعليمات البرمجية ودفعها بمعايير الترميز المناسبة كما أعلنها مجتمع دروبال. يمكن أن يساعد أيضًا في تحسين مهاراتك في إدارة المشروع ويسمح للمطورين بالتزام التعليمات البرمجية بمعايير رسالة الالتزام المناسبة. تعرف على المزيد حول Git hooks وكيفية تفعيلها.

خطاطيف بوابة

ما هو Git Hook

Git Hooks هي نصوص يتم تشغيلها تلقائيًا في كل مرة يتم فيها استدعاء أمر Git. تمامًا كما تستخدم hook_form_alter لتغيير النماذج في دروبال ، يمكنك الحصول على خطاطيف منفصلة محددة مسبقًا لكل إجراء من عمليات Git.

بوابة هوك

التمثيل التصويري لـ Git hook

العثور على خطافات Git

يمكنك العثور على Git hooks داخل مجلد المشروع (بشرط تهيئة Git) ضمن .git / hooks . هناك ، ستجد جميع الخطافات بامتداد .sample لمنعها من التنفيذ افتراضيًا.

للاستفادة من الخطافات المطلوبة ، تحتاج إلى إزالة امتداد .sample وتحرير الكود الخاص بك للتنفيذ.

هناك العديد من خطاطيف Git المتاحة ولكننا سنستخدم خطافات Git مسبقة الالتزام لبدء معايير تشفير دروبال.

خطافات Git للالتزام المسبق هي خطافات يتم تشغيلها قبل الالتزام بالتعليمات البرمجية. إنه يتحقق من سطر التعليمات البرمجية الذي يتم الالتزام به.

تنفيذ Git Hooks

قبل أن تبدأ ، تأكد من أن لديك هذه المتطلبات الأساسية جاهزة:

  • ملحن
  • شخص سخيف
  • php كود الشم
  • دروبال / المبرمج: 8.3.13

الإجراء أدناه هو لتثبيته في أجهزة Mac. يمكنك العثور على الرابط المرجعي هنا لتثبيت التعليمات على الأجهزة الأخرى.

  • الشراب تثبيت php-code-sniffer
  • يتطلب الملحن العالمي دروبال / المبرمج: 8.3.13
  • phpcs - مجموعة التكوين install_paths ~ /. composer / البائع / دروبال / المبرمج / coder_sniffer
  • سوف يمنحك phpcs -i → معايير الترميز المثبتة.

هيا نبدأ!

أقوم بإنشاء مشروع دروبال جديد يسمى demo . يمكنك استخدامه في مشروعك الحالي أيضًا.

عرض مشروع دروبال

→ باستخدام الأمر cd وصلنا إلى مجلد المشروع.
تجريبي على قرص مضغوط

→ تهيئة git في المشروع
Git init

→ إضافة واجعل أول التزام لي.
git الالتزام -m "الالتزام الأولي"

الأولي ارتكاب

→ تثبيت برنامج php code sniffer باستخدام الأمر أدناه لنظام التشغيل Mac.
الشراب تثبيت php-code-sniffer

التحديث التلقائي

→ تثبيت برنامج دروبال باستخدام الملحن
يتطلب الملحن العالمي دروبال / المبرمج: 8.3.13

→ بمجرد تحديد المبرمج ومساره ، ستحصل على الإخراج التالي كما هو موضح أدناه.
phpcs - مجموعة التكوين install_paths ~ /. composer / البائع / دروبال / المبرمج / coder_sniffer

→ phpcs -i
سيعطيك الأمر أعلاه دروبال ودروبال براكتيس

الشم

→ الآن يمكنك تنفيذ التعليمات البرمجية الخاصة بك. إذا كان لديك أي خطأ معياري في بناء الجملة أو الترميز ، فسيتم إخطارك في العرض وسيتم إحباط عملية الالتزام.

الالتزام بكود

→ يوجد أدناه رمز لإصلاح الخطأ تلقائيًا

phpcbf --standard = Drupal --extensions = php، module، inc، install، test، profile، theme، css، info، txt، md، yml web / modules / custom / demo

يجب إصلاح أي مشكلات أخرى يدويًا. قم بإلزام التعليمات البرمجية الخاصة بك بمجرد الانتهاء.

إصلاح رمز الخطأ

بمجرد أن يتم تنظيف الكود الخاص بك ، سيسمح لك بتنفيذ الكود

كود الاختبار

ما عليك سوى نسخ الكود ولصقه في عينة ما قبل الالتزام داخل .git / hooks. لا تنس إزالة نماذج الامتدادات.

نموذج التعليمات البرمجية للالتزام المسبق:

 #!/bin/bash # Redirect output to stderr. exec 1>&2 # Color codes for the error message. redclr=`tput setaf 1` greenclr=`tput setaf 2` blueclr=`tput setaf 4` reset=`tput sgr0` # Printing the notification in the display screen. echo "${blueclr}" echo "................................. Validating your codes ……..…………....." echo "-----------------------------------------------------------${reset}" # Mentioning the directories which should be excluded. dir_exclude='\/kint\/|\/contrib\/|\/devel\/|\/libraries\/|\/vendor\/|\.info$|\.png$|\.gif$|\.jpg$|\.ico$|\.patch$|\.htaccess$|\.sh$|\.ttf$|\.woff$|\.eot$|\.svg$' # Checking for the debugging keyword in the commiting code base. keywords=(ddebug_backtrace debug_backtrace dpm print_r var_dump dump console\.log) keywords_for_grep=$(printf "|%s" "${keywords[@]}") keywords_for_grep=${keywords_for_grep:1} # Flags for the counter. synatx_error_found=0 debugging_function_found=0 merge_conflict=0 coding_standard_error=0 # Checking for PHP syntax errors. changed_files=`git diff-index --diff-filter=ACMRT --cached --name-only HEAD -- | egrep '\.theme$|\.module$|\.inc|\.php$'` if [ -n "$changed_files" ] then for FILE in $changed_files; do php -l $FILE > /dev/null 2>&1 compiler_result=$? if [ $compiler_result -eq 255 ] then if [ $synatx_error_found -eq 0 ] then echo "${redclr}" echo "# Compilation error(s):" echo "=========================${reset}" fi synatx_error_found=1 `php -l $FILE > /dev/null` fi done fi # Checking for debugging functions. files_changed=`git diff-index --diff-filter=ACMRT --cached --name-only HEAD -- | egrep -v $dir_exclude` if [ -n "$files_changed" ] then for FILE in $files_changed ; do for keyword in "${keywords[@]}" ; do pattern="^\+(.*)?$keyword(.*)?" resulted_files=`git diff --cached $FILE | egrep -x "$pattern"` if [ ! -z "$resulted_files" ] then if [ $debugging_function_found -eq 0 ] then echo "${redclr}" echo "Validating keywords" echo "================================================${reset}" fi debugging_function_found=1 echo "Debugging function" $keyword git grep -n $keyword $FILE | awk '{split($0,a,":"); printf "\found in " a[1] " in line " a[2] "\n"; }' fi done done fi # Checking for Drupal coding standards changed_files=`git diff-index --diff-filter=ACMRT --cached --name-only HEAD -- | egrep -v $dir_exclude | egrep '\.php$|\.module$|\.inc$|\.install$|\.test$|\.profile$|\.theme$|\.js$|\.css$|\.info$|\.txt$|\.yml$'` if [ -n "$changed_files" ] then phpcs_result=`phpcs --standard=Drupal --extensions=php,module,inc,install,test,profile,theme,css,info,txt,md,yml --report=csv $changed_files` if [ "$phpcs_result" != "File,Line,Column,Type,Message,Source,Severity,Fixable" ] then echo "${redclr}" echo "# Hey Buddy, The hook found some issue(s)." echo "---------------------------------------------------------------------------------------------${reset}" phpcs --standard=Drupal --extensions=php,module,inc,install,test,profile,theme,css,info,txt,md,yml $changed_files echo "<=======> Run below command to fix the issue(s)" echo "# phpcbf --standard=Drupal --extensions=php,module,inc,install,test,profile,theme,css,info,txt,md,yml your_custom_module_or_file_path" echo “<====================================================>" echo "# To skip the Drupal Coding standard issue(s), Please use this commands << git commit -m your commit Message --no-verify >>" echo "-----------------------------------------------------------------------------------------------------------------------------------------${reset}" coding_standard_error=1 fi fi # Checking for merge conflict markers. files_changed=`git diff-index --diff-filter=ACMRT --cached --name-only HEAD --` if [ -n "$files_changed" ] then for FILE in $files_changed; do pattern="(<<<<|====|>>>>)+.*(\n)?" resulted_files=`egrep -in "$pattern" $FILE` if [ ! -z "$resulted_files" ] then if [ $merge_conflict -eq 0 ] then echo "${redclr}" echo "-----------------------Unable to commit the file(s):------------------------" echo "-----------------------------------${reset}" fi merge_conflict=1 echo $FILE fi done fi # Printing final result errors_found=$((synatx_error_found+debugging_function_found+merge_conflict+coding_standard_error)) if [ $errors_found -eq 0 ] then echo "${greenclr}" echo "Wow! It is clean code" echo "${reset}" else echo "${redclr}" echo "Please Correct the errors mentioned above. We are aborting your commit." echo "${reset}" exit 1 fi

افكار اخيرة

أتمنى أن تكون هذه المقالة مثيرة للاهتمام وأنها تساعدك على كتابة كود أفضل لأن الشفرة الأفضل تعني شبكة أفضل! أحب ما قرأته للتو؟ ضع في اعتبارك الاشتراك في نشرتنا الإخبارية الأسبوعية واحصل على رؤى تقنية مثل هذه التي يتم تسليمها إلى بريدك الوارد!