#!/bin/sh . "$(dirname "$0")/_/husky.sh" # Function to display errors display_errors() { local errors="$1" echo "Errors detected:" echo "---------------------------------------" echo "$errors" echo "---------------------------------------" } # Get the list of staged files STAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.(php|js|css|jsx|ts|tsx)$') # If there are no staged files, exit if [ -z "$STAGED_FILES" ]; then echo "No files staged for commit." exit 0 fi # Initialize error flags ESLINT_ERRORS="" PHP_ERRORS=0 # Function to run ESLint and Prettier on JavaScript files run_js_tools() { local files="$1" if [ -n "$files" ]; then echo "Running ESLint..." for FILE in $files; do ESLINT_OUTPUT=$(npx eslint "$FILE" 2>&1) if [ $? -ne 0 ]; then display_errors "$ESLINT_OUTPUT" ESLINT_ERRORS=1 fi done echo "Running Prettier..." for FILE in $files; do npx prettier --write "$FILE" done fi } # Function to run PHP tools run_php_tools() { local files="$1" if [ -n "$files" ]; then echo "Checking PHP syntax errors..." SYNTAX_ERRORS=0 for FILE in $files; do php -l "$FILE" if [ $? -ne 0 ]; then SYNTAX_ERRORS=1 fi done if [ $SYNTAX_ERRORS -ne 0 ]; then PHP_ERRORS=1 echo "Syntax errors detected in PHP files." fi echo "Running PHPCBF..." for FILE in $files; do /home/aissel/.config/composer/vendor/bin/phpcbf --standard=/var/www/html/google_forms/phpcs.xml "$FILE" || true done echo "Running PHP CS Fixer..." for FILE in $files; do /home/aissel/.config/composer/vendor/bin/php-cs-fixer fix "$FILE" done echo "Running PHPCS..." for FILE in $files; do PHPCS_OUTPUT=$(/home/aissel/.config/composer/vendor/bin/phpcs --standard=/var/www/html/google_forms/phpcs.xml "$FILE" 2>&1) if [ $? -ne 0 ]; then display_errors "$PHPCS_OUTPUT" PHP_ERRORS=1 fi done fi } # Run tools based on file types run_js_tools "$(echo "$STAGED_FILES" | grep -E '\.(js|jsx|ts|tsx)$')" run_php_tools "$(echo "$STAGED_FILES" | grep '\.php$')" # Add the fixed files back to the staging area for FILE in $STAGED_FILES; do git add "$FILE" done # Exit with error code if there were any errors if [ $PHP_ERRORS -ne 0 ] || [ $ESLINT_ERRORS -eq 1 ]; then echo "Pre-commit checks failed. Please fix the errors before committing." exit 1 fi echo "Pre-commit checks completed."