diff --git a/_tools/setup.sh b/_tools/setup.sh new file mode 100644 index 0000000..fd4c786 --- /dev/null +++ b/_tools/setup.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +cp contrib/pre-commit .git/hooks/pre-commit +chmod +x .git/hooks/pre-commit diff --git a/composer.json b/composer.json index c7a1f65..85ecd48 100644 --- a/composer.json +++ b/composer.json @@ -1,13 +1,11 @@ { - "scripts": { - "post-install-cmd": [ - "PHPCodeChecker\\Installer::postInstall" - ], - "post-update-cmd": [ - "PHPCodeChecker\\Installer::postInstall" - ] - }, - "require": { - "wickedreports/phpcs-pre-commit-hook": "^0.7.0" + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", + "wp-coding-standards/wpcs": "^2.3" + }, + "scripts": { + "post-install-cmd": [ + "bash _tools/setup.sh" + ] } } diff --git a/composer.lock b/composer.lock index dd7f61d..9e0ee7c 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,79 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "957eb6c729bd4e3aa67e474d0bd31acc", - "packages": [ + "content-hash": "3a147d50695956de52f7cbf827b47830", + "packages": [], + "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v0.7.1", + "source": { + "type": "git", + "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", + "reference": "fe390591e0241955f22eb9ba327d137e501c771c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", + "reference": "fe390591e0241955f22eb9ba327d137e501c771c", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3", + "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "phpcompatibility/php-compatibility": "^9.0", + "sensiolabs/security-checker": "^4.1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", + "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" + }, + "time": "2020-12-07T18:04:37+00:00" + }, { "name": "squizlabs/php_codesniffer", "version": "3.5.8", @@ -63,47 +134,57 @@ "time": "2020-10-23T02:01:07+00:00" }, { - "name": "wickedreports/phpcs-pre-commit-hook", - "version": "0.7", + "name": "wp-coding-standards/wpcs", + "version": "2.3.0", "source": { "type": "git", - "url": "https://github.com/WickedReports/phpcs-pre-commit-hook.git", - "reference": "d376e83d5d8038cf9eb8e4cccc0fce160763e0ad" + "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", + "reference": "7da1894633f168fe244afc6de00d141f27517b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WickedReports/phpcs-pre-commit-hook/zipball/d376e83d5d8038cf9eb8e4cccc0fce160763e0ad", - "reference": "d376e83d5d8038cf9eb8e4cccc0fce160763e0ad", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", + "reference": "7da1894633f168fe244afc6de00d141f27517b62", "shasum": "" }, "require": { - "squizlabs/php_codesniffer": "3.*" + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.3.1" }, - "type": "scripts", - "autoload": { - "psr-4": { - "PHPCodeChecker\\": "src/" - } + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", + "phpcompatibility/php-compatibility": "^9.0", + "phpcsstandards/phpcsdevtools": "^1.0", + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "GPL-3.0" + "MIT" ], "authors": [ { - "name": "Stanislav Malkin", - "email": "stan@wickedreports.com" + "name": "Contributors", + "homepage": "https://github.com/WordPress/WordPress-Coding-Standards/graphs/contributors" } ], - "description": "PHPCS check before commit", + "description": "PHP_CodeSniffer rules (sniffs) to enforce WordPress coding conventions", + "keywords": [ + "phpcs", + "standards", + "wordpress" + ], "support": { - "issues": "https://github.com/WickedReports/phpcs-pre-commit-hook/issues", - "source": "https://github.com/WickedReports/phpcs-pre-commit-hook/tree/master" + "issues": "https://github.com/WordPress/WordPress-Coding-Standards/issues", + "source": "https://github.com/WordPress/WordPress-Coding-Standards", + "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2018-03-13T23:57:17+00:00" + "time": "2020-05-13T23:57:56+00:00" } ], - "packages-dev": [], "aliases": [], "minimum-stability": "stable", "stability-flags": [], diff --git a/contrib/pre-commit b/contrib/pre-commit new file mode 100644 index 0000000..0dc792f --- /dev/null +++ b/contrib/pre-commit @@ -0,0 +1,61 @@ +#!/bin/sh + +# Modified from: https://github.com/bjornjohansen/wp-pre-commit-hook +# Also: https://softdiscover.com/wordpress/perfect-setup-for-a-wordpress-project-development/ + +PROJECT=`php -r "echo dirname(dirname(dirname(realpath('$0'))));"` +STAGED_FILES_CMD=`git diff --cached --name-only --diff-filter=ACMR HEAD | grep \\\\.php` + +# Determine if a file list is passed +if [ "$#" -eq 1 ] +then + oIFS=$IFS + IFS=' + ' + SFILES="$1" + IFS=$oIFS +fi +SFILES=${SFILES:-$STAGED_FILES_CMD} + +echo "Checking PHP Lint..." +for FILE in $SFILES +do + php -l -d display_errors=0 $PROJECT/$FILE + if [ $? != 0 ] + then + echo "Fix the error before commit." + exit 1 + fi + FILES="$FILES $PROJECT/$FILE" +done + +if [ -f "$PROJECT/phpcs.ruleset.xml" ] +then + RULESET="$PROJECT/phpcs.ruleset.xml" +elif [ -f "$PROJECT/phpcs.xml.dist" ] +then + RULESET="$PROJECT/phpcs.xml.dist" +else + RULESET="WordPress" +fi + +if [ "$FILES" != "" ] +then + echo "Checking Code Standard Compliance, using $RULESET as ruleset standard..." + ./vendor/bin/phpcs --standard="$RULESET" --colors --encoding=utf-8 -n -p $FILES + if [ $? != 0 ] + then + echo "Coding standards errors have been detected. Running phpcbf..." + ./vendor/bin/phpcbf --standard="$RULESET" --encoding=utf-8 -n -p $FILES + git add $FILES + echo "Running Code Sniffer again..." + ./vendor/bin/phpcs --standard="$RULESET" --colors --encoding=utf-8 -n -p $FILES + if [ $? != 0 ] + then + echo "Errors found not fixable automatically. You need to manually fix them." + exit 1 + fi + fi +fi + +exit $?