Comment adhérer aux normes de codage Drupal avec les crochets Git

Publié: 2023-05-23

Un bon code est comme des créations Lego bien construites - il est solide, beau et facile à changer si vous en avez besoin. L'importance de bonnes normes de codage est particulièrement élevée lorsque vous codez en équipe, travaillez sur un projet évolutif ou participez à une communauté open source comme Drupal.

Comme pour tout autre projet open source, Drupal compte des milliers de développeurs travaillant sur le projet. Et chacun d'eux vient avec son propre niveau d'expertise. Comment vous assurez-vous que tous les membres de votre équipe ou de la communauté suivent les bonnes pratiques de codage ? Crochets Git !

Les Git Hooks sont un moyen simple et automatisé de s'assurer que votre code respecte toujours les normes de codage de Drupal. La mise en œuvre des normes de codage Drupal avec le crochet Git aidera les développeurs à valider et à pousser le code avec les normes de codage appropriées telles que déclarées par la communauté Drupal. Cela peut également vous aider à améliorer vos compétences en gestion de projet et permet aux développeurs de valider du code avec des normes de message de validation appropriées. En savoir plus sur les crochets Git et comment les mettre en action.

crochets git

Qu'est-ce qu'un crochet Git

Les crochets Git sont des scripts qui s'exécutent automatiquement chaque fois qu'une commande Git est invoquée. Tout comme vous utiliseriez hook_form_alter pour modifier les formulaires dans Drupal, vous pouvez avoir des hooks prédéfinis séparés pour chaque action Git.

crochet git

La représentation picturale du crochet Git

Trouver des crochets Git

Vous pouvez trouver des crochets Git dans votre dossier de projet (à condition que Git soit initialisé) sous .git/hooks . Vous y trouverez tous les crochets avec l'extension .sample pour les empêcher de s'exécuter par défaut.

Pour utiliser les crochets requis, vous devez supprimer l'extension .sample et modifier votre code pour l'exécution.

Il existe de nombreux crochets Git disponibles, mais nous allons utiliser des crochets Git pré-commit pour lancer les normes de codage Drupal.

Les crochets Git pré-commit sont des crochets qui s'exécutent avant que le code ne soit validé. Il vérifie la ligne de code qui est validée.

Implémentation des crochets Git

Avant de commencer, assurez-vous que ces exigences de base sont prêtes :

  • Compositeur
  • Gite
  • Renifleur de code php
  • drupal/codeur : 8.3.13

La procédure ci-dessous est pour l'installer sur les appareils Mac. Vous pouvez trouver le lien de référence ici pour installer les instructions sur d'autres appareils.

  • brasser installer php-code-sniffer
  • composer global nécessite drupal/coder:8.3.13
  • phpcs --config-set install_paths ~/.composer/vendor/drupal/coder/coder_sniffer
  • phpcs -i → Vous donnera les normes de codage installées.

Commençons!

Je crée un nouveau projet Drupal appelé demo . Vous pouvez également l'utiliser dans votre projet existant.

démo du projet drupal

→ En utilisant la commande cd, nous sommes entrés dans le dossier du projet.
démo cd

→ initialisation de git dans le projet
Init Git

→ Ajouter et faire mon premier commit.
git commit -m "Commit initial"

Validation initiale

→ Installation du renifleur de code php à l'aide de la commande ci-dessous pour Mac.
brasser installer php-code-sniffer

mise à jour automatique

→ Installation du codeur Drupal à l'aide de composer
composer global nécessite drupal/coder:8.3.13

→ Une fois le codeur et son chemin définis, vous obtiendrez la sortie suivante, comme illustré ci-dessous.
phpcs --config-set install_paths ~/.composer/vendor/drupal/coder/coder_sniffer

→ phpcs -i
La commande ci-dessus vous donnera Drupal et DrupalPractice

renifleur

→ Vous pouvez maintenant valider votre code. Si vous rencontrez une erreur standard de syntaxe ou de codage, vous en serez averti à l'écran et votre processus de validation sera abandonné.

code de validation

→ Ci-dessous se trouve le code pour corriger l'erreur automatiquement

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

Tout autre problème devra être résolu manuellement. Validez votre code une fois terminé.

corriger le code d'erreur

Une fois votre code propre, il vous permettra de valider le code

code d'essai

Copiez et collez simplement le code dans pre-commit.sample dans .git/hooks. N'oubliez pas de supprimer les exemples d'extensions.

Exemple de code de pré-validation :

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

Dernières pensées

J'espère que vous avez trouvé cet article intéressant et qu'il vous aide à écrire un meilleur code car un meilleur code signifie un meilleur web ! Vous avez aimé ce que vous venez de lire ? Envisagez de vous abonner à notre newsletter hebdomadaire et recevez des informations techniques comme celle-ci dans votre boîte de réception !