Cum să respectați standardele de codare Drupal cu Git Hooks

Publicat: 2023-05-23

Codul bun este ca niște creații Lego bine construite - este puternic, arată bine și este ușor de schimbat dacă este necesar. Importanța unor standarde bune de codare este deosebit de mare atunci când codificați într-o echipă, lucrați la un proiect scalabil sau participați la o comunitate open-source precum Drupal.

Ca și în cazul oricărui alt proiect open-source, Drupal are mii de dezvoltatori care lucrează la proiect. Și fiecare dintre ei vine cu propriul nivel de expertiză. Cum vă asigurați că toată lumea din echipa dumneavoastră sau din comunitate urmează bunele practici de codificare? Git Hooks!

Git Hooks sunt o modalitate simplă și automată de a vă asigura că codul dvs. respectă întotdeauna standardele de codare Drupal. Implementarea standardelor de codare Drupal cu cârligul Git va ajuta dezvoltatorii să angajeze și să împingă codul cu standarde de codare adecvate, așa cum sunt declarate de comunitatea Drupal. De asemenea, vă poate ajuta să vă îmbunătățiți abilitățile de gestionare a proiectelor și permite dezvoltatorilor să comite cod cu standarde adecvate pentru mesaje de comitere. Aflați mai multe despre cârligele Git și despre cum să le puneți în acțiune.

git hooks

Ce este un Git Hook

Git Hooks sunt scripturi care se vor rula automat de fiecare dată când este invocată o comandă Git. Așa cum ați folosi hook_form_alter pentru a modifica formularele din Drupal, puteți avea hook-uri predefinite separate pentru fiecare acțiune Git.

git hook

Reprezentarea picturală a cârligului Git

Găsirea cârligelor Git

Puteți găsi Git hooks în folderul proiectului (cu condiția ca Git să fie inițializat) sub .git/hooks . Acolo, veți găsi toate cârligele cu extensia .sample pentru a le împiedica să se execute în mod implicit.

Pentru a utiliza cârligele necesare, trebuie să eliminați extensia .sample și să editați codul pentru execuție.

Există multe cârlige Git disponibile, dar vom folosi cârlige Git pre-commit pentru a iniția standardele de codare Drupal.

Cârligele Git pre-commit sunt hook-uri care vor rula înainte ca codul să fie comis. Verifică linia de cod care este comisă.

Implementarea Git Hooks

Înainte de a începe, asigurați-vă că aveți pregătite aceste cerințe de bază:

  • Compozitor
  • Git
  • Php-code-sniffer
  • drupal/coder:8.3.13

Procedura de mai jos este pentru instalarea acestuia pe dispozitivele Mac. Puteți găsi linkul de referință aici pentru instrucțiuni de instalare pe alte dispozitive.

  • brew instalează php-code-sniffer
  • compozitorul global necesită drupal/coder: 8.3.13
  • phpcs --config-set installed_paths ~/.composer/vendor/drupal/coder/coder_sniffer
  • phpcs -i → Vă va oferi standarde de codare instalate.

Sa incepem!

Creez un nou proiect Drupal numit demo . Îl poți folosi și în proiectul tău existent.

proiect demo drupal

→ Folosind comanda cd am intrat în folderul proiectului.
cd demo

→ inițializarea git în proiect
Git init

→ Adăugarea și efectuarea primului meu commit.
git commit -m „Comitare inițială”

Angajarea inițială

→ Instalarea codului php sniffer folosind comanda de mai jos pentru Mac.
brew instalează php-code-sniffer

actualizat automat

→ Instalarea codificatorului Drupal folosind compozitor
compozitorul global necesită drupal/coder: 8.3.13

→ Odată ce codificatorul și calea acestuia sunt definite, veți obține următoarea ieșire, așa cum se arată în imaginea de mai jos.
phpcs --config-set installed_paths ~/.composer/vendor/drupal/coder/coder_sniffer

→ phpcs -i
Comanda de mai sus vă va oferi Drupal și DrupalPractice

adulmecă

→ Acum vă puteți comite codul. Dacă aveți vreo eroare de sintaxă sau de codare standard, veți fi notificat pe afișaj și procesul de comitere va fi întrerupt.

cod de comitere

→ Mai jos este codul pentru a remedia automat eroarea

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

Orice alte probleme vor trebui rezolvate manual. Angajați codul odată terminat.

remediați codul de eroare

Odată ce codul dvs. este curățat, vă va permite să trimiteți codul

codul de testare

Doar copiați și lipiți codul în pre-commit.sample în .git/hooks. Nu uitați să eliminați extensiile mostre.

Exemplu de cod precomitare:

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

Gânduri finale

Sper că ați găsit acest articol interesant și că vă ajută să scrieți un cod mai bun, deoarece un cod mai bun înseamnă un web mai bun! Ți-a plăcut ceea ce tocmai ai citit? Vă recomandăm să vă abonați la buletinul nostru informativ săptămânal și să primiți informații despre tehnologie precum acesta în căsuța dvs. de e-mail!