Cara Mematuhi Standar Coding Drupal dengan Git Hooks
Diterbitkan: 2023-05-23Kode yang bagus seperti kreasi Lego yang dibuat dengan baik - kuat, terlihat bagus, dan mudah diubah jika perlu. Pentingnya standar pengkodean yang baik sangat tinggi saat Anda membuat kode dalam tim, mengerjakan proyek yang dapat diskalakan, atau berpartisipasi dalam komunitas sumber terbuka seperti Drupal.
Seperti halnya proyek sumber terbuka lainnya, Drupal memiliki ribuan pengembang yang mengerjakan proyek tersebut. Dan masing-masing datang dengan tingkat keahlian mereka sendiri. Bagaimana Anda memastikan semua orang di tim Anda atau di komunitas mengikuti praktik pengkodean yang baik? Pengait Git!
Git Hooks adalah cara mudah dan otomatis untuk memastikan kode Anda selalu memenuhi standar pengkodean Drupal. Menerapkan Standar Pengkodean Drupal dengan Git hook akan membantu pengembang untuk berkomitmen dan mendorong kode dengan standar pengkodean yang tepat seperti yang dinyatakan oleh komunitas Drupal. Itu juga dapat membantu meningkatkan keterampilan manajemen proyek Anda dan memungkinkan pengembang untuk melakukan kode dengan standar pesan komit yang tepat. Pelajari lebih lanjut tentang kait Git dan cara menerapkannya.
Apa itu Git Hook
Git Hooks adalah skrip yang akan berjalan secara otomatis setiap kali perintah Git dipanggil. Sama seperti Anda akan menggunakan hook_form_alter untuk mengubah formulir di Drupal, Anda dapat memiliki kait terpisah yang telah ditentukan sebelumnya untuk setiap tindakan Git.
Representasi Bergambar Git hook
Menemukan kait Git
Anda dapat menemukan kait Git di dalam folder proyek Anda (asalkan Git diinisialisasi) di bawah .git/hooks . Di sana, Anda akan menemukan semua kait dengan ekstensi .sample untuk mencegahnya dijalankan secara default.
Untuk menggunakan hook yang diperlukan, Anda perlu menghapus ekstensi .sample dan mengedit kode Anda untuk eksekusi.
Ada banyak kait Git yang tersedia tetapi kami akan menggunakan kait Git pra-komitmen untuk memulai standar pengkodean Drupal.
Kait Git pra-komit adalah kait yang akan berjalan sebelum kode dikomit. Itu memeriksa baris kode yang dikomit.
Menerapkan Git Hooks
Sebelum memulai, pastikan Anda sudah menyiapkan persyaratan dasar ini:
- Komposer
- Git
- Sniffer kode-php
- drupal/coder:8.3.13
Prosedur di bawah ini untuk menginstalnya di perangkat Mac. Anda dapat menemukan tautan referensi di sini untuk petunjuk penginstalan di perangkat lain.
- brew install php-code-sniffer
- komposer global membutuhkan drupal/coder:8.3.13
- phpcs --config-set installation_paths ~/.composer/vendor/drupal/coder/coder_sniffer
- phpcs -i → Akan memberi Anda standar pengkodean yang terinstal.
Mari kita mulai!
Saya sedang membuat proyek Drupal baru bernama demo . Anda juga dapat menggunakannya di proyek Anda yang sudah ada.
→ Menggunakan perintah cd kita masuk ke folder proyek.
cd demo
→ menginisialisasi git ke dalam proyek
Git init
→ Menambah dan membuat komit pertama saya.
git commit -m "Komit awal"
→ Memasang pengendus kode php menggunakan perintah di bawah ini untuk Mac.
brew install php-code-sniffer
→ Menginstal pembuat kode Drupal menggunakan komposer
komposer global membutuhkan drupal/coder:8.3.13
→ Setelah pembuat kode dan jalurnya ditentukan, Anda akan mendapatkan keluaran berikut seperti yang ditunjukkan gambar di bawah ini.
phpcs --config-set installation_paths ~/.composer/vendor/drupal/coder/coder_sniffer
→ php -i
Perintah di atas akan memberi Anda Drupal dan DrupalPractice
→ Sekarang Anda dapat mengkomit kode Anda. Jika Anda memiliki sintaks atau kesalahan standar pengkodean, Anda akan diberi tahu di layar dan proses komit Anda akan dibatalkan.
→ Di bawah ini adalah kode untuk memperbaiki kesalahan secara otomatis
phpcbf --standard=Drupal --extensions=php,module,inc,instal,tes,profil,tema,css,info,txt,md,yml web/modules/custom/demo
Masalah lain apa pun perlu diperbaiki secara manual. Komit kode Anda setelah selesai.
Setelah kode Anda bersih, Anda dapat mengkomit kode tersebut
Cukup salin dan tempel kode di pre-commit.sample di dalam .git/hooks. Jangan lupa untuk menghapus ekstensi sampel.
Contoh kode pra-komit:
#!/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
Pikiran Akhir
Saya harap artikel ini menarik bagi Anda dan membantu Anda menulis kode yang lebih baik karena kode yang lebih baik berarti web yang lebih baik! Menyukai apa yang baru saja Anda baca? Pertimbangkan untuk berlangganan buletin mingguan kami dan dapatkan wawasan teknologi seperti ini yang dikirimkan ke kotak masuk Anda!