Monorepo: PSR-4 classes naming and Strict types directive rules for CodeSniffer. (#49438)
* Monorepo: PSR-4 classes naming linting. * Monorepo: codesniffer config changes after reviewing existing violations. * Monorepo: enable `Generic.PHP.RequireStrictTypes` rule. * Monorepo: some exclusions for the new rule. * Monorepo: test changes. * Monorepo: test changes. * Monorepo: cleanup. * Monorepo: changelog entry.
This commit is contained in:
parent
adbdcceb28
commit
a307c22d1e
|
@ -1,7 +1,8 @@
|
||||||
{
|
{
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"woocommerce/woocommerce-sniffs": "1.0.0",
|
"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": {
|
"config": {
|
||||||
"platform": {
|
"platform": {
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "9afb60a267493fc0d864410ef878ea41",
|
"content-hash": "51e3f59e8a93e41ed5edb619543009e0",
|
||||||
"packages": [],
|
"packages": [],
|
||||||
"packages-dev": [
|
"packages-dev": [
|
||||||
{
|
{
|
||||||
|
@ -455,6 +455,59 @@
|
||||||
],
|
],
|
||||||
"time": "2024-05-20T13:34:27+00:00"
|
"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",
|
"name": "sirbrillig/phpcs-changed",
|
||||||
"version": "v2.11.5",
|
"version": "v2.11.5",
|
||||||
|
@ -509,6 +562,67 @@
|
||||||
},
|
},
|
||||||
"time": "2024-05-23T20:01:41+00:00"
|
"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",
|
"name": "squizlabs/php_codesniffer",
|
||||||
"version": "3.10.1",
|
"version": "3.10.1",
|
||||||
|
@ -589,6 +703,61 @@
|
||||||
],
|
],
|
||||||
"time": "2024-05-22T21:24:41+00:00"
|
"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",
|
"name": "woocommerce/woocommerce-sniffs",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# Lint branch
|
# Lint branch
|
||||||
#
|
#
|
||||||
# Runs phpcs-changed, comparing the current branch to its "base" or "parent" branch.
|
# Runs phpcs-changed, comparing the current branch to its "base" or "parent" branch.
|
||||||
|
@ -10,36 +9,13 @@
|
||||||
# ./lint-branch.sh base-branch
|
# ./lint-branch.sh base-branch
|
||||||
|
|
||||||
baseBranch=${1:-"trunk"}
|
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')
|
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
|
# Only complete this if changed files are detected.
|
||||||
if [[ $? != 0 ]]; then
|
if [[ -z $changedFiles ]]; then
|
||||||
printf "${redColoured}Unfortunately, CodeSniffer reported some violations which need to be addressed (see above).\n"
|
echo "No changed files detected."
|
||||||
exit 1
|
exit 0
|
||||||
else
|
|
||||||
printf "CodeSniffer reported no violations, well done!\n"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Lint new (excl. renamed) php-files to contain strict types directive.
|
composer exec phpcs-changed -- -s --git --git-base $baseBranch $changedFiles
|
||||||
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
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
Significance: patch
|
||||||
|
Type: dev
|
||||||
|
|
||||||
|
Monorepo: enable new linting rules for PHP (PSR-4 naming, Strict types declaration).
|
|
@ -50,6 +50,26 @@
|
||||||
<exclude-pattern>tests/</exclude-pattern>
|
<exclude-pattern>tests/</exclude-pattern>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="Suin.Classes.PSR4">
|
||||||
|
<include-pattern>src/</include-pattern>
|
||||||
|
<include-pattern>tests/php/src/</include-pattern>
|
||||||
|
<exclude-pattern>plugins/woocommerce/src/Admin/Notes/DeprecatedNotes.php</exclude-pattern>
|
||||||
|
<exclude-pattern>plugins/woocommerce/tests/php/src/Proxies/ExampleClasses/</exclude-pattern>
|
||||||
|
<properties>
|
||||||
|
<property name="composerJsonPath" value="composer.json"/>
|
||||||
|
</properties>
|
||||||
|
</rule>
|
||||||
|
|
||||||
|
<rule ref="Generic.PHP.RequireStrictTypes">
|
||||||
|
<include-pattern>includes/</include-pattern>
|
||||||
|
<include-pattern>lib/</include-pattern>
|
||||||
|
<include-pattern>src/</include-pattern>
|
||||||
|
<include-pattern>tests/</include-pattern>
|
||||||
|
<exclude-pattern>plugins/woocommerce/includes/admin/views/</exclude-pattern>
|
||||||
|
<exclude-pattern>plugins/woocommerce/includes/emails/</exclude-pattern>
|
||||||
|
<exclude-pattern>plugins/woocommerce/includes/react-admin/emails/</exclude-pattern>
|
||||||
|
</rule>
|
||||||
|
|
||||||
<rule ref="WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents">
|
<rule ref="WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents">
|
||||||
<exclude-pattern>tests/src</exclude-pattern>
|
<exclude-pattern>tests/src</exclude-pattern>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
Loading…
Reference in New Issue