Git Hooks ile Drupal Kodlama Standartlarına Nasıl Bağlı Kalınır?

Yayınlanan: 2023-05-23

İyi kod, iyi inşa edilmiş Lego kreasyonları gibidir - güçlüdür, iyi görünür ve gerekirse değiştirmek kolaydır. İyi kodlama standartlarının önemi özellikle bir ekipte kod yazarken, ölçeklenebilir bir proje üzerinde çalışırken veya Drupal gibi açık kaynaklı bir topluluğa katılırken yüksektir.

Diğer tüm açık kaynaklı projelerde olduğu gibi, Drupal'ın da proje üzerinde çalışan binlerce geliştiricisi vardır. Ve her biri kendi uzmanlık düzeyiyle birlikte gelir. Ekibinizdeki veya topluluktaki herkesin iyi kodlama uygulamalarını takip etmesini nasıl sağlarsınız? Git Kancaları!

Git Kancaları, kodunuzun her zaman Drupal'ın kodlama standartlarını karşılamasını sağlamanın kolay ve otomatik bir yoludur. Drupal Kodlama Standartlarını Git kancası ile uygulamak, geliştiricilerin Drupal topluluğu tarafından beyan edilen uygun kodlama standartlarıyla kodu taahhüt etmelerine ve itmelerine yardımcı olacaktır. Ayrıca, proje yönetimi becerilerinizi geliştirmenize yardımcı olabilir ve geliştiricilerin uygun taahhüt mesajı standartlarıyla kod işlemesine olanak tanır. Git kancaları ve bunları nasıl eyleme geçireceğiniz hakkında daha fazla bilgi edinin.

git kancaları

Git Kancası nedir

Git Hook'ları, bir Git komutu her çağrıldığında otomatik olarak çalışacak betiklerdir. Tıpkı Drupal'daki formları değiştirmek için hook_form_alter kullandığınız gibi, her Git eylemi için önceden tanımlanmış ayrı kancalara sahip olabilirsiniz.

git kancası

Git kancasının Resimli Temsili

Git kancalarını bulma

Git kancalarını proje klasörünüzde (Git'in başlatılması koşuluyla) .git/hooks altında bulabilirsiniz. Orada, varsayılan olarak çalıştırılmalarını önlemek için .sample uzantılı tüm kancaları bulacaksınız.

Gerekli kancalardan yararlanmak için, .sample uzantısını kaldırmanız ve yürütme için kodunuzu düzenlemeniz gerekir.

Kullanılabilir birçok Git kancası vardır, ancak Drupal kodlama standartlarını başlatmak için ön işleme Git kancalarını kullanacağız.

Ön işleme Git kancaları, kod işlenmeden önce çalışacak kancalardır. İşlenmekte olan kod satırını kontrol eder.

Git Kancalarını Uygulama

Başlamadan önce, bu temel gereksinimlerin hazır olduğundan emin olun:

  • Besteci
  • git
  • Php kodu algılayıcısı
  • drupal/kodlayıcı:8.3.13

Aşağıdaki prosedür, Mac cihazlarına yüklemek içindir. Diğer cihazlara kurulum talimatları için referans bağlantısını burada bulabilirsiniz.

  • demlemek kurulum php-kodu-sniffer
  • besteci global gerekli drupal/coder:8.3.13
  • phpcs --config-setinstalled_paths ~/.composer/vendor/drupal/coder/coder_sniffer
  • phpcs -i → Size kurulu kodlama standartlarını verecektir.

Hadi başlayalım!

Demo adlı yeni bir Drupal projesi oluşturuyorum. Mevcut projenizde de kullanabilirsiniz.

drupal proje demosu

→ cd komutu ile proje klasörüne girdik.
CD demosu

→ git'i projeye başlatıyor
Git başlatma

→ Ekleme ve ilk taahhüdümü yapma.
git commit -m "İlk işlem"

İlk taahhüt

→ Mac için aşağıdaki komutu kullanarak php code sniffer kurulumu.
demlemek kurulum php-kodu-sniffer

otomatik güncellendi

→ Drupal coder'ı besteci kullanarak kurmak
besteci global gerekli drupal/coder:8.3.13

→ Kodlayıcı ve yolu tanımlandıktan sonra, aşağıdaki görüntüde gösterildiği gibi aşağıdaki çıktıyı alacaksınız.
phpcs --config-setinstalled_paths ~/.composer/vendor/drupal/coder/coder_sniffer

→ phpcs -i
Yukarıdaki komut size Drupal ve DrupalPractice verecektir.

koklayıcı

→ Artık kodunuzu işleyebilirsiniz. Herhangi bir sözdizimi veya kodlama standart hatası varsa, ekranda bilgilendirileceksiniz ve taahhüt işleminiz iptal edilecektir.

taahhüt kodu

→ Hatayı otomatik olarak düzeltmek için kod aşağıdadır

phpcbf --standart=Drupal --extensions=php,modül,inc,yükle,test,profil,tema,css,bilgi,txt,md,yml web/modüller/özel/demo

Diğer tüm sorunların manuel olarak düzeltilmesi gerekecektir. İşiniz bittiğinde kodunuzu kaydedin.

hata kodunu düzelt

Kodunuz temizlendikten sonra, kodu işlemenize izin verecektir.

deneme kodu

Pre-commit.sample içindeki kodu kopyalayıp .git/hooks içine yapıştırmanız yeterlidir. Örnek uzantıları kaldırmayı unutmayın.

Ön işleme kodu örneği:

 #!/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

Son düşünceler

Umarım bu makaleyi ilginç bulmuşsunuzdur ve daha iyi kod yazmanıza yardımcı olmuştur çünkü daha iyi kod daha iyi bir web demektir! Az önce okuduklarını beğendin mi? Haftalık bültenimize abone olmayı düşünün ve bunun gibi teknik bilgiler gelen kutunuza gelsin!