diff --git a/plugins/woocommerce/bin/composer/phpcs/composer.json b/plugins/woocommerce/bin/composer/phpcs/composer.json index 40f4c679edb..ac869fa28ed 100644 --- a/plugins/woocommerce/bin/composer/phpcs/composer.json +++ b/plugins/woocommerce/bin/composer/phpcs/composer.json @@ -1,7 +1,8 @@ { "require-dev": { "woocommerce/woocommerce-sniffs": "1.0.0", - "sirbrillig/phpcs-changed": "^2.11.1" + "sirbrillig/phpcs-changed": "^2.11.1", + "suin/phpcs-psr4-sniff": "^3.0" }, "config": { "platform": { diff --git a/plugins/woocommerce/bin/composer/phpcs/composer.lock b/plugins/woocommerce/bin/composer/phpcs/composer.lock index 17836dc2f60..b6919a6d2d5 100644 --- a/plugins/woocommerce/bin/composer/phpcs/composer.lock +++ b/plugins/woocommerce/bin/composer/phpcs/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "9afb60a267493fc0d864410ef878ea41", + "content-hash": "51e3f59e8a93e41ed5edb619543009e0", "packages": [], "packages-dev": [ { @@ -455,6 +455,59 @@ ], "time": "2024-05-20T13:34:27+00:00" }, + { + "name": "phpstan/phpdoc-parser", + "version": "0.4.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "d8d9d4645379e677466d407034436bb155b11c65" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/d8d9d4645379e677466d407034436bb155b11c65", + "reference": "d8d9d4645379e677466d407034436bb155b11c65", + "shasum": "" + }, + "require": { + "php": "~7.1" + }, + "require-dev": { + "consistence/coding-standard": "^3.5", + "ergebnis/composer-normalize": "^2.0.2", + "jakub-onderka/php-parallel-lint": "^0.9.2", + "phing/phing": "^2.16.0", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.19", + "phpstan/phpstan-strict-rules": "^0.12", + "phpunit/phpunit": "^6.3", + "slevomat/coding-standard": "^4.7.2", + "symfony/process": "^4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "0.4-dev" + } + }, + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/master" + }, + "time": "2020-04-13T16:28:46+00:00" + }, { "name": "sirbrillig/phpcs-changed", "version": "v2.11.5", @@ -509,6 +562,67 @@ }, "time": "2024-05-23T20:01:41+00:00" }, + { + "name": "slevomat/coding-standard", + "version": "6.3.10", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "58fa5ea2c048357ae55185eb5e93ca2826fffde0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/58fa5ea2c048357ae55185eb5e93ca2826fffde0", + "reference": "58fa5ea2c048357ae55185eb5e93ca2826fffde0", + "shasum": "" + }, + "require": { + "php": "^7.1", + "phpstan/phpdoc-parser": "0.4.0 - 0.4.4", + "squizlabs/php_codesniffer": "^3.5.5" + }, + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "0.6.2", + "phing/phing": "2.16.3", + "php-parallel-lint/php-parallel-lint": "1.2.0", + "phpstan/phpstan": "0.12.19", + "phpstan/phpstan-deprecation-rules": "0.12.2", + "phpstan/phpstan-phpunit": "0.12.8", + "phpstan/phpstan-strict-rules": "0.12.2", + "phpunit/phpunit": "7.5.20|8.5.2|9.1.2" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "6.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/6.3.10" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2020-06-22T11:33:09+00:00" + }, { "name": "squizlabs/php_codesniffer", "version": "3.10.1", @@ -589,6 +703,61 @@ ], "time": "2024-05-22T21:24:41+00:00" }, + { + "name": "suin/phpcs-psr4-sniff", + "version": "v3.0.0", + "source": { + "type": "git", + "url": "https://github.com/suin/phpcs-psr4-sniff.git", + "reference": "b000ca1e3d04c9876b39c2e56859760b93dfc84d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/suin/phpcs-psr4-sniff/zipball/b000ca1e3d04c9876b39c2e56859760b93dfc84d", + "reference": "b000ca1e3d04c9876b39c2e56859760b93dfc84d", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=7.1", + "slevomat/coding-standard": ">=4.7 <8.0.0", + "squizlabs/php_codesniffer": ">=3.3 <4.0.0" + }, + "type": "phpcodesniffer-standard", + "autoload": { + "psr-0": { + "Suin\\Sniffs\\Classes\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "suin", + "email": "suinyeze@gmail.com", + "homepage": "https://github.com/suin", + "role": "Developer" + } + ], + "description": "PHP_CodeSniffer sniff that checks class name matches PSR-4 project structure.", + "homepage": "https://github.com/suin/php", + "keywords": [ + "PSR-4", + "coding-standards", + "coding-style", + "namespace", + "php-codesniffer", + "phpcs", + "static-analysis" + ], + "support": { + "issues": "https://github.com/suin/php/issues", + "source": "https://github.com/suin/phpcs-psr4-sniff/tree/v3.0.0" + }, + "time": "2021-06-02T06:16:24+00:00" + }, { "name": "woocommerce/woocommerce-sniffs", "version": "1.0.0", diff --git a/plugins/woocommerce/bin/lint-branch.sh b/plugins/woocommerce/bin/lint-branch.sh index 562bd5c27a4..81ed2f5e44f 100644 --- a/plugins/woocommerce/bin/lint-branch.sh +++ b/plugins/woocommerce/bin/lint-branch.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash - # Lint branch # # Runs phpcs-changed, comparing the current branch to its "base" or "parent" branch. @@ -10,36 +9,13 @@ # ./lint-branch.sh base-branch baseBranch=${1:-"trunk"} -redColoured='\033[0;31m' -# Lint changed php-files to match code style. changedFiles=$(git diff $(git merge-base HEAD $baseBranch) --relative --name-only --diff-filter=d -- '*.php') -if [[ -n $changedFiles ]]; then - printf "Linting the following files with CodeSniffer:\n" - printf " %s\n" $changedFiles - composer exec phpcs-changed -- -s --git --git-base $baseBranch $changedFiles - if [[ $? != 0 ]]; then - printf "${redColoured}Unfortunately, CodeSniffer reported some violations which need to be addressed (see above).\n" - exit 1 - else - printf "CodeSniffer reported no violations, well done!\n" - fi +# Only complete this if changed files are detected. +if [[ -z $changedFiles ]]; then + echo "No changed files detected." + exit 0 fi -# Lint new (excl. renamed) php-files to contain strict types directive. -newFiles=$(git diff $(git merge-base HEAD $baseBranch) --relative --name-only --diff-filter=dmr -- '*.php') -if [[ -n $newFiles ]]; then - printf "Linting the new files for declaring strict types directive (https://www.php.net/manual/en/language.types.declarations.php#language.types.declarations.strict):\n" - printf " %s\n" $newFiles - - passingFiles=$(find $newFiles -type f -exec grep -xl --regexp='declare(\s*strict_types\s*=\s*1\s*);' /dev/null {} +) - violatingFiles=$(grep -vxf <(printf "%s\n" $passingFiles | sort) <(printf "%s\n" $newFiles | sort) || echo '') - if [[ -n "$violatingFiles" ]]; then - printf "${redColoured}Unfortunately, some files miss 'declare( strict_types = 1)' directive and need to be updated:\n" - printf "${redColoured} %s\n" $violatingFiles - exit 1 - else - printf "Strict types directive linting reported no violations, well done!\n" - fi -fi +composer exec phpcs-changed -- -s --git --git-base $baseBranch $changedFiles diff --git a/plugins/woocommerce/changelog/dev-codesniffer-validate-psr4-autoloading b/plugins/woocommerce/changelog/dev-codesniffer-validate-psr4-autoloading new file mode 100644 index 00000000000..c7623c6ae00 --- /dev/null +++ b/plugins/woocommerce/changelog/dev-codesniffer-validate-psr4-autoloading @@ -0,0 +1,4 @@ +Significance: patch +Type: dev + +Monorepo: enable new linting rules for PHP (PSR-4 naming, Strict types declaration). diff --git a/plugins/woocommerce/phpcs.xml b/plugins/woocommerce/phpcs.xml index 0de1018b4f8..3f0931e607c 100644 --- a/plugins/woocommerce/phpcs.xml +++ b/plugins/woocommerce/phpcs.xml @@ -50,6 +50,26 @@ tests/ + + src/ + tests/php/src/ + plugins/woocommerce/src/Admin/Notes/DeprecatedNotes.php + plugins/woocommerce/tests/php/src/Proxies/ExampleClasses/ + + + + + + + includes/ + lib/ + src/ + tests/ + plugins/woocommerce/includes/admin/views/ + plugins/woocommerce/includes/emails/ + plugins/woocommerce/includes/react-admin/emails/ + + tests/src