From ccebd374672fd63d1ad6d7aae67ee1159548d763 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 10 Jul 2025 16:31:07 +0200 Subject: [PATCH] PHPStan level 9 --- .gitignore | 1 + composer.json | 1 + phpstan.neon.dist | 18 ++++++++++++++++++ utils/get-package-require-from-composer.php | 2 +- utils/make-phar.php | 16 +++++++++++----- 5 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 phpstan.neon.dist diff --git a/.gitignore b/.gitignore index df3d0c20..a0d6a571 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ PHAR_BUILD_VERSION phpunit.xml phpcs.xml .phpcs.xml +/build diff --git a/composer.json b/composer.json index b01edf0c..414244d1 100644 --- a/composer.json +++ b/composer.json @@ -81,6 +81,7 @@ "test": [ "@lint", "@phpcs", + "@phpstan", "@phpunit", "@behat" ] diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 00000000..a1f53a4d --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,18 @@ +parameters: + level: 9 + paths: + - php + - utils + scanDirectories: + - vendor/wp-cli/wp-cli + scanFiles: + - vendor/php-stubs/wordpress-stubs/wordpress-stubs.php + - php/boot-phar.php + treatPhpDocTypesAsCertain: false + dynamicConstantNames: + - WP_DEBUG + - WP_DEBUG_LOG + - WP_DEBUG_DISPLAY + ignoreErrors: + - identifier: missingType.parameter + - identifier: missingType.return diff --git a/utils/get-package-require-from-composer.php b/utils/get-package-require-from-composer.php index 6639ddd7..b936addb 100644 --- a/utils/get-package-require-from-composer.php +++ b/utils/get-package-require-from-composer.php @@ -6,7 +6,7 @@ if ( ! file_exists( $file ) ) { exit( 1 ); } -$contents = file_get_contents( $file ); +$contents = (string) file_get_contents( $file ); $composer = json_decode( $contents ); if ( empty( $composer ) || ! is_object( $composer ) ) { diff --git a/utils/make-phar.php b/utils/make-phar.php index 934f9453..3dfb635e 100644 --- a/utils/make-phar.php +++ b/utils/make-phar.php @@ -37,7 +37,7 @@ define( 'BE_QUIET', isset( $runtime_config['quiet'] ) && $runtime_config['quiet' define( 'BUILD', isset( $runtime_config['build'] ) ? $runtime_config['build'] : '' ); -$current_version = trim( file_get_contents( WP_CLI_ROOT . '/VERSION' ) ); +$current_version = trim( (string) file_get_contents( WP_CLI_ROOT . '/VERSION' ) ); if ( isset( $runtime_config['version'] ) ) { $new_version = $runtime_config['version']; @@ -101,9 +101,9 @@ function add_file( $phar, $path ) { $strips ); } - $phar[ $key ] = preg_replace( $strip_res, '', file_get_contents( $path ) ); + $phar[ $key ] = preg_replace( $strip_res, '', (string) file_get_contents( $path ) ); } else { - $phar[ $key ] = file_get_contents( $path ); + $phar[ $key ] = (string) file_get_contents( $path ); } } @@ -125,6 +125,9 @@ function get_composer_versions( $current_version ) { return ''; } + /** + * @var null|array{packages: array{name?: string, version?: string, source?: array{reference?: string}, dist?: array{reference?: string}}} $composer_lock + */ $composer_lock = json_decode( $composer_lock_file, true ); if ( ! $composer_lock ) { fwrite( STDERR, sprintf( "Warning: Could not decode '%s'." . PHP_EOL, $composer_lock_path ) ); @@ -286,8 +289,11 @@ if ( 'cli' !== BUILD ) { add_file( $phar, $file ); } // Any PHP files in the project root - foreach ( glob( WP_CLI_BASE_PATH . '/*.php' ) as $file ) { - add_file( $phar, $file ); + $files = glob( WP_CLI_BASE_PATH . '/*.php' ); + if ( $files ) { + foreach ( $files as $file ) { + add_file( $phar, $file ); + } } } }