Issue #3178534 by mondrake, klausi, alexpott, longwave, mallezie, Taran2L, mglaman, Spokje, kim.pepper, daffie, andypost, neclimdul, xjm, Gábor Hojtsy, cmlara: Start running PHPStan on Drupal core (level 0)
parent
30523436ce
commit
fe307a0fee
|
|
@ -21,9 +21,12 @@
|
|||
"composer/composer": "^2.0.2",
|
||||
"drupal/coder": "^8.3.10",
|
||||
"instaclick/php-webdriver": "^1.4.1",
|
||||
"mglaman/phpstan-drupal": "^1.1.9",
|
||||
"mikey179/vfsstream": "^1.6.8",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"phpspec/prophecy-phpunit": "^2",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.4.0",
|
||||
"symfony/css-selector": "^5.4",
|
||||
"symfony/phpunit-bridge": "^5.4",
|
||||
"symfony/var-dumper": "^5.4",
|
||||
|
|
@ -51,7 +54,8 @@
|
|||
"allow-plugins": {
|
||||
"composer/installers": true,
|
||||
"drupal/core-project-message": true,
|
||||
"drupal/core-vendor-hardening": true
|
||||
"drupal/core-vendor-hardening": true,
|
||||
"phpstan/extension-installer": true
|
||||
}
|
||||
},
|
||||
"extra": {
|
||||
|
|
|
|||
|
|
@ -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": "6209de25fead07a04a71b6af893db664",
|
||||
"content-hash": "210789b4f85a82f083006db5aeafc33d",
|
||||
"packages": [
|
||||
{
|
||||
"name": "asm89/stack-cors",
|
||||
|
|
@ -5501,6 +5501,110 @@
|
|||
},
|
||||
"time": "2021-07-22T09:24:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mglaman/phpstan-drupal",
|
||||
"version": "1.1.9",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/mglaman/phpstan-drupal.git",
|
||||
"reference": "74b356d990906fa0dd423544ef0d1b48cd52a246"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/74b356d990906fa0dd423544ef0d1b48cd52a246",
|
||||
"reference": "74b356d990906fa0dd423544ef0d1b48cd52a246",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.4 || ^8.0",
|
||||
"phpstan/phpstan": "^1.0",
|
||||
"symfony/finder": "~3.4.5 ||^4.2 || ^5.0 || ^6.0",
|
||||
"symfony/yaml": "~3.4.5 || ^4.2|| ^5.0 || ^6.0",
|
||||
"webflo/drupal-finder": "^1.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/installers": "^1.9",
|
||||
"drupal/core-dev": "^8.8@alpha || ^9.0",
|
||||
"drupal/core-recommended": "^8.8@alpha || ^9.0",
|
||||
"drush/drush": "^9.6 || ^10.0",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan-deprecation-rules": "^1.0",
|
||||
"phpstan/phpstan-strict-rules": "^1.0",
|
||||
"phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9",
|
||||
"squizlabs/php_codesniffer": "^3.3"
|
||||
},
|
||||
"suggest": {
|
||||
"jangregor/phpstan-prophecy": "Provides a prophecy/prophecy extension for phpstan/phpstan.",
|
||||
"phpstan/phpstan-deprecation-rules": "For catching deprecations, especially in Drupal core.",
|
||||
"phpstan/phpstan-phpunit": "PHPUnit extensions and rules for PHPStan."
|
||||
},
|
||||
"type": "phpstan-extension",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-main": "1.0-dev"
|
||||
},
|
||||
"installer-paths": {
|
||||
"tests/fixtures/drupal/core": [
|
||||
"type:drupal-core"
|
||||
],
|
||||
"tests/fixtures/drupal/libraries/{$name}": [
|
||||
"type:drupal-library"
|
||||
],
|
||||
"tests/fixtures/drupal/modules/contrib/{$name}": [
|
||||
"type:drupal-module"
|
||||
],
|
||||
"tests/fixtures/drupal/profiles/contrib/{$name}": [
|
||||
"type:drupal-profile"
|
||||
],
|
||||
"tests/fixtures/drupal/themes/contrib/{$name}": [
|
||||
"type:drupal-theme"
|
||||
]
|
||||
},
|
||||
"phpstan": {
|
||||
"includes": [
|
||||
"extension.neon"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"drupal-phpunit-hack.php"
|
||||
],
|
||||
"psr-4": {
|
||||
"mglaman\\PHPStanDrupal\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Matt Glaman",
|
||||
"email": "nmd.matt@gmail.com"
|
||||
}
|
||||
],
|
||||
"description": "Drupal extension and rules for PHPStan",
|
||||
"support": {
|
||||
"issues": "https://github.com/mglaman/phpstan-drupal/issues",
|
||||
"source": "https://github.com/mglaman/phpstan-drupal/tree/1.1.9"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/mglaman",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://opencollective.com/phpstan-drupal",
|
||||
"type": "open_collective"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/mglaman/phpstan-drupal",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-01-17T15:57:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "mikey179/vfsstream",
|
||||
"version": "v1.6.10",
|
||||
|
|
@ -6053,6 +6157,115 @@
|
|||
},
|
||||
"time": "2020-07-09T08:33:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/extension-installer",
|
||||
"version": "1.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/extension-installer.git",
|
||||
"reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/extension-installer/zipball/66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
|
||||
"reference": "66c7adc9dfa38b6b5838a9fb728b68a7d8348051",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"composer-plugin-api": "^1.1 || ^2.0",
|
||||
"php": "^7.1 || ^8.0",
|
||||
"phpstan/phpstan": ">=0.11.6"
|
||||
},
|
||||
"require-dev": {
|
||||
"composer/composer": "^1.8",
|
||||
"phing/phing": "^2.16.3",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2.0",
|
||||
"phpstan/phpstan-strict-rules": "^0.11 || ^0.12"
|
||||
},
|
||||
"type": "composer-plugin",
|
||||
"extra": {
|
||||
"class": "PHPStan\\ExtensionInstaller\\Plugin"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PHPStan\\ExtensionInstaller\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "Composer plugin for automatic installation of PHPStan extensions",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/extension-installer/issues",
|
||||
"source": "https://github.com/phpstan/extension-installer/tree/1.1.0"
|
||||
},
|
||||
"time": "2020-12-13T13:06:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "1.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "72b04d97b5e6e60a081f17c416fef35bd521120b"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/72b04d97b5e6e60a081f17c416fef35bd521120b",
|
||||
"reference": "72b04d97b5e6e60a081f17c416fef35bd521120b",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1|^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpstan/phpstan-shim": "*"
|
||||
},
|
||||
"bin": [
|
||||
"phpstan",
|
||||
"phpstan.phar"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan - PHP Static Analysis Tool",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/1.4.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/ondrejmirtes",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/phpstan",
|
||||
"type": "patreon"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2022-01-14T15:58:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "9.2.10",
|
||||
|
|
@ -8260,6 +8473,50 @@
|
|||
],
|
||||
"time": "2021-07-28T10:34:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webflo/drupal-finder",
|
||||
"version": "1.2.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webflo/drupal-finder.git",
|
||||
"reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webflo/drupal-finder/zipball/c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
|
||||
"reference": "c8e5dbe65caef285fec8057a4c718a0d4138d1ee",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-json": "*"
|
||||
},
|
||||
"require-dev": {
|
||||
"mikey179/vfsstream": "^1.6",
|
||||
"phpunit/phpunit": "^4.8"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"src/DrupalFinder.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-2.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Florian Weber",
|
||||
"email": "florian@webflo.org"
|
||||
}
|
||||
],
|
||||
"description": "Helper class to locate a Drupal installation from a given path.",
|
||||
"support": {
|
||||
"issues": "https://github.com/webflo/drupal-finder/issues",
|
||||
"source": "https://github.com/webflo/drupal-finder/tree/1.2.2"
|
||||
},
|
||||
"time": "2020-10-27T09:42:17+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
"version": "1.10.0",
|
||||
|
|
|
|||
|
|
@ -15,8 +15,11 @@
|
|||
"friends-of-behat/mink-browserkit-driver": "^1.4",
|
||||
"instaclick/php-webdriver": "^1.4.1",
|
||||
"justinrainbow/json-schema": "^5.2",
|
||||
"mglaman/phpstan-drupal": "^1.1.9",
|
||||
"mikey179/vfsstream": "^1.6.8",
|
||||
"phpspec/prophecy-phpunit": "^2",
|
||||
"phpstan/extension-installer": "^1.1",
|
||||
"phpstan/phpstan": "^1.4.0",
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"symfony/browser-kit": "^5.4",
|
||||
"symfony/css-selector": "^5.4",
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
"friends-of-behat/mink-browserkit-driver": "v1.6.1",
|
||||
"instaclick/php-webdriver": "1.4.10",
|
||||
"justinrainbow/json-schema": "5.2.11",
|
||||
"mglaman/phpstan-drupal": "1.1.9",
|
||||
"mikey179/vfsstream": "v1.6.10",
|
||||
"myclabs/deep-copy": "1.10.2",
|
||||
"nikic/php-parser": "v4.13.2",
|
||||
|
|
@ -32,6 +33,8 @@
|
|||
"phpdocumentor/type-resolver": "1.6.0",
|
||||
"phpspec/prophecy": "v1.15.0",
|
||||
"phpspec/prophecy-phpunit": "v2.0.1",
|
||||
"phpstan/extension-installer": "1.1.0",
|
||||
"phpstan/phpstan": "1.4.0",
|
||||
"phpunit/php-code-coverage": "9.2.10",
|
||||
"phpunit/php-file-iterator": "3.0.6",
|
||||
"phpunit/php-invoker": "3.1.1",
|
||||
|
|
@ -67,6 +70,7 @@
|
|||
"symfony/lock": "v5.4.2",
|
||||
"symfony/phpunit-bridge": "v5.4.0",
|
||||
"theseer/tokenizer": "1.2.1",
|
||||
"webflo/drupal-finder": "1.2.2",
|
||||
"webmozart/assert": "1.10.0"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -298,14 +298,14 @@ class ExecutionContext implements ExecutionContextInterface {
|
|||
* {@inheritdoc}
|
||||
*/
|
||||
public function markObjectAsInitialized($cache_key) {
|
||||
// Not supported, so nothing todo.
|
||||
throw new \LogicException('\Symfony\Component\Validator\Context\ExecutionContextInterface::markObjectAsInitialized is unsupported.');
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isObjectInitialized($cache_key): bool {
|
||||
// Not supported, so nothing todo.
|
||||
throw new \LogicException('\Symfony\Component\Validator\Context\ExecutionContextInterface::isObjectInitialized is unsupported.');
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -788,6 +788,7 @@ metapackages
|
|||
metatag
|
||||
metatags
|
||||
meΦΩ
|
||||
mglaman
|
||||
miaus
|
||||
middlewares
|
||||
midgardmvc
|
||||
|
|
@ -994,6 +995,7 @@ phpdocumentor
|
|||
phpfile
|
||||
phpserialize
|
||||
phpspec
|
||||
phpstan
|
||||
phpunit
|
||||
phpunit's
|
||||
pianura
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,10 @@
|
|||
# Configuration file for PHPStan static code checking, see https://phpstan.org .
|
||||
# PHPStan is triggered on Drupal CI in commit-code-check.sh.
|
||||
includes:
|
||||
- phpstan.neon.dist
|
||||
|
||||
# Do not add additional configuration to this file. This configuration exists
|
||||
# only to allow core/scripts/dev/commit-code-check.sh to run against a subset of
|
||||
# the codebase.
|
||||
parameters:
|
||||
reportUnmatchedIgnoredErrors: false
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
# Configuration file for PHPStan static code checking, see https://phpstan.org .
|
||||
# PHPStan is triggered on Drupal CI in commit-code-check.sh.
|
||||
includes:
|
||||
- phpstan-baseline.neon
|
||||
|
||||
parameters:
|
||||
|
||||
level: 0
|
||||
|
||||
paths:
|
||||
- .
|
||||
- ../composer
|
||||
|
||||
excludePaths:
|
||||
# Skip settings.
|
||||
- ../*/settings*.php
|
||||
# Skip test fixtures.
|
||||
- */tests/fixtures/*.php
|
||||
# Below extends on purpose a non existing class for testing.
|
||||
- modules/system/tests/modules/plugin_test/src/Plugin/plugin_test/fruit/ExtendingNonInstalledClass.php
|
||||
# @todo files below need to be excluded as they prevent baseline generation.
|
||||
# Fixing them is a priority.
|
||||
- modules/link/tests/src/Kernel/LinkItemTest.php
|
||||
|
||||
ignoreErrors:
|
||||
# new static() is a best practice in Drupal, so we cannot fix that.
|
||||
- "#^Unsafe usage of new static#"
|
||||
|
||||
# Ignore common errors for now.
|
||||
- "#^Access to an undefined property#"
|
||||
- "#^Call to an undefined method#"
|
||||
- "#^Cannot unset offset#"
|
||||
- "#should return .* but return statement is missing#"
|
||||
- "#Drupal calls should be avoided in classes, use dependency injection instead#"
|
||||
- "#^Plugin definitions cannot be altered.#"
|
||||
- "#^Missing cache backend declaration for performance.#"
|
||||
- "#cache tag might be unclear and does not contain the cache key in it.#"
|
||||
- "#^Class .* extends @internal class#"
|
||||
|
|
@ -11,6 +11,7 @@
|
|||
# - File modes.
|
||||
# - No changes to core/node_modules directory.
|
||||
# - PHPCS checks PHP and YAML files.
|
||||
# - PHPStan checks PHP files.
|
||||
# - ESLint checks JavaScript and YAML files.
|
||||
# - Checks .es6.js and .js files are equivalent.
|
||||
# - Stylelint checks CSS files.
|
||||
|
|
@ -110,6 +111,10 @@ TOP_LEVEL=$(git rev-parse --show-toplevel)
|
|||
# This variable will be set to one when the file core/phpcs.xml.dist is changed.
|
||||
PHPCS_XML_DIST_FILE_CHANGED=0
|
||||
|
||||
# This variable will be set to one when the files core/phpstan-baseline.neon or
|
||||
# core/phpstan.neon.dist are changed.
|
||||
PHPSTAN_DIST_FILE_CHANGED=0
|
||||
|
||||
# This variable will be set to one when one of the eslint config file is
|
||||
# changed:
|
||||
# - core/.eslintrc.passing.json
|
||||
|
|
@ -126,6 +131,10 @@ for FILE in $FILES; do
|
|||
PHPCS_XML_DIST_FILE_CHANGED=1;
|
||||
fi;
|
||||
|
||||
if [[ $FILE == "core/phpstan-baseline.neon" || $FILE == "core/phpstan.neon.dist" ]]; then
|
||||
PHPSTAN_DIST_FILE_CHANGED=1;
|
||||
fi;
|
||||
|
||||
if [[ $FILE == "core/.eslintrc.json" || $FILE == "core/.eslintrc.passing.json" || $FILE == "core/.eslintrc.jquery.json" ]]; then
|
||||
ESLINT_CONFIG_PASSING_FILE_CHANGED=1;
|
||||
fi;
|
||||
|
|
@ -181,6 +190,28 @@ printf "\n"
|
|||
printf -- '-%.0s' {1..100}
|
||||
printf "\n"
|
||||
|
||||
# Run PHPStan on all files in one go for better performance. APCu is disabled to
|
||||
# ensure that the composer classmap is not corrupted.
|
||||
if [[ $PHPSTAN_DIST_FILE_CHANGED == "1" ]]; then
|
||||
printf "\nRunning PHPStan on *all* files.\n"
|
||||
php -d apc.enabled=0 -d apc.enable_cli=0 vendor/bin/phpstan analyze --no-progress --configuration="$TOP_LEVEL/core/phpstan.neon.dist"
|
||||
else
|
||||
printf "\nRunning PHPStan on changed files.\n"
|
||||
php -d apc.enabled=0 -d apc.enable_cli=0 vendor/bin/phpstan analyze --no-progress --configuration="$TOP_LEVEL/core/phpstan-partial.neon" $ABS_FILES
|
||||
fi
|
||||
if [ "$?" -ne "0" ]; then
|
||||
# If there are failures set the status to a number other than 0.
|
||||
FINAL_STATUS=1
|
||||
printf "\nPHPStan: ${red}failed${reset}\n"
|
||||
else
|
||||
printf "\nPHPStan: ${green}passed${reset}\n"
|
||||
fi
|
||||
|
||||
# Add a separator line to make the output easier to read.
|
||||
printf "\n"
|
||||
printf -- '-%.0s' {1..100}
|
||||
printf "\n"
|
||||
|
||||
# When the file core/phpcs.xml.dist has been changed, then PHPCS must check all files.
|
||||
if [[ $PHPCS_XML_DIST_FILE_CHANGED == "1" ]]; then
|
||||
# Test all files with phpcs rules.
|
||||
|
|
|
|||
Loading…
Reference in New Issue