Skip to content

PHPStan level 9 #166

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,15 @@
"wp-cli/db-command": "^1.3 || ^2",
"wp-cli/entity-command": "^1.3 || ^2",
"wp-cli/extension-command": "^1.2 || ^2",
"wp-cli/wp-cli-tests": "^4"
"wp-cli/wp-cli-tests": "dev-add/phpstan-enhancements"
},
"config": {
"process-timeout": 7200,
"sort-packages": true,
"allow-plugins": {
"dealerdirect/phpcodesniffer-composer-installer": true,
"johnpbloch/wordpress-core-installer": true
"johnpbloch/wordpress-core-installer": true,
"phpstan/extension-installer": true
},
"lock": false
},
Expand Down Expand Up @@ -73,12 +74,14 @@
"behat-rerun": "rerun-behat-tests",
"lint": "run-linter-tests",
"phpcs": "run-phpcs-tests",
"phpstan": "run-phpstan-tests",
"phpcbf": "run-phpcbf-cleanup",
"phpunit": "run-php-unit-tests",
"prepare-tests": "install-package-tests",
"test": [
"@lint",
"@phpcs",
"@phpstan",
"@phpunit",
"@behat"
]
Expand Down
23 changes: 23 additions & 0 deletions phpstan.neon.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
parameters:
level: 9
paths:
- src
- language-command.php
scanDirectories:
- vendor/wp-cli/wp-cli/php
- vendor/wp-cli/wp-cli-tests
scanFiles:
- vendor/php-stubs/wordpress-stubs/wordpress-stubs.php
treatPhpDocTypesAsCertain: false
strictRules:
uselessCast: true
closureUsesThis: true
overwriteVariablesWithLoop: true
matchingInheritedMethodNames: true
numericOperandsInArithmeticOperators: true
switchConditionsMatchingType: true
ignoreErrors:
- identifier: missingType.iterableValue
- identifier: missingType.property
- identifier: missingType.parameter
- identifier: missingType.return
21 changes: 18 additions & 3 deletions src/Core_Language_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@
* | az | Azerbaijani | uninstalled |
*
* @subcommand list
*
* @param string[] $args Positional arguments. Unused.
* @param array{field?: string, format: string, language?: string, english_name?: string, native_name?: string, status?: string, update?: string, updated?: string} $assoc_args Associative arguments.
*/
public function list_( $args, $assoc_args ) {
$translations = $this->get_all_languages();
Expand Down Expand Up @@ -154,8 +157,10 @@
* 1
*
* @subcommand is-installed
*
* @param array{string} $args Positional arguments.
*/
public function is_installed( $args, $assoc_args = array() ) {
public function is_installed( $args ) {
list( $language_code ) = $args;
$available = $this->get_installed_languages();
if ( in_array( $language_code, $available, true ) ) {
Expand Down Expand Up @@ -191,6 +196,9 @@
* Success: Installed 1 of 1 languages.
*
* @subcommand install
*
* @param string[] $args Positional arguments.
* @param array{activate?: bool} $assoc_args Associative arguments.
*/
public function install( $args, $assoc_args ) {
$language_codes = (array) $args;
Expand Down Expand Up @@ -253,8 +261,10 @@
*
* @subcommand uninstall
* @throws WP_CLI\ExitException
*
* @param string[] $args Positional arguments.
*/
public function uninstall( $args, $assoc_args ) {
public function uninstall( $args ) {
global $wp_filesystem;

$dir = 'core' === $this->obj_type ? '' : "/$this->obj_type";
Expand Down Expand Up @@ -339,6 +349,9 @@
* Success: Updated 1/1 translation.
*
* @subcommand update
*
* @param string[] $args Positional arguments.
* @param array{'dry-run'?: bool} $assoc_args Associative arguments.
*/
public function update( $args, $assoc_args ) { // phpcs:ignore Generic.CodeAnalysis.UselessOverridingMethod.Found -- Overruling the documentation, so not useless ;-).
parent::update( $args, $assoc_args );
Expand All @@ -362,8 +375,10 @@
*
* @subcommand activate
* @throws WP_CLI\ExitException
*
* @param array{string} $args Positional arguments.
*/
public function activate( $args, $assoc_args ) {
public function activate( $args ) {

Check warning on line 381 in src/Core_Language_Command.php

View check run for this annotation

Codecov / codecov/patch

src/Core_Language_Command.php#L381

Added line #L381 was not covered by tests
\WP_CLI::warning( 'This command is deprecated. use wp site switch-language instead' );

list( $language_code ) = $args;
Expand Down
25 changes: 21 additions & 4 deletions src/Plugin_Language_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class Plugin_Language_Command extends WP_CLI\CommandWithTranslation {
* | az | Azerbaijani | uninstalled |
*
* @subcommand list
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, field?: string, format: string, plugin?: string, language?: string, english_name?: string, native_name?: string, status?: string, update?: string, updated?: string} $assoc_args Associative arguments.
*/
public function list_( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand Down Expand Up @@ -154,7 +157,7 @@ public function list_( $args, $assoc_args ) {

// Support features like --status=active.
foreach ( array_keys( $translation ) as $field ) {
if ( isset( $assoc_args[ $field ] ) && ! in_array( $translation[ $field ], array_map( 'trim', explode( ',', $assoc_args[ $field ] ) ), true ) ) {
if ( isset( $assoc_args[ $field ] ) && ! in_array( $translation[ $field ], array_map( 'trim', explode( ',', (string) $assoc_args[ $field ] ) ), true ) ) {
continue 2;
}
}
Expand Down Expand Up @@ -188,10 +191,12 @@ public function list_( $args, $assoc_args ) {
* 1
*
* @subcommand is-installed
*
* @param non-empty-array<string> $args Positional arguments.
*/
public function is_installed( $args, $assoc_args = array() ) {
public function is_installed( $args ) {
$plugin = array_shift( $args );
$language_codes = (array) $args;
$language_codes = $args;

$available = $this->get_installed_languages( $plugin );

Expand Down Expand Up @@ -244,6 +249,9 @@ public function is_installed( $args, $assoc_args = array() ) {
* Success: Installed 1 of 1 languages.
*
* @subcommand install
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, format: string} $assoc_args Associative arguments.
*/
public function install( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand All @@ -267,7 +275,7 @@ public function install( $args, $assoc_args ) {
*/
private function install_one( $args, $assoc_args ) {
$plugin = array_shift( $args );
$language_codes = (array) $args;
$language_codes = $args;
$count = count( $language_codes );

$available = $this->get_installed_languages( $plugin );
Expand Down Expand Up @@ -419,6 +427,9 @@ private function install_many( $args, $assoc_args ) {
* Success: Uninstalled 1 of 1 languages.
*
* @subcommand uninstall
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, format: string} $assoc_args Associative arguments.
*/
public function uninstall( $args, $assoc_args ) {
/** @var WP_Filesystem_Base $wp_filesystem */
Expand Down Expand Up @@ -471,6 +482,9 @@ public function uninstall( $args, $assoc_args ) {
$errors = 0;
$skips = 0;

/**
* @var string $plugin
*/
foreach ( $plugins as $plugin ) {
$available = $this->get_installed_languages( $plugin );

Expand Down Expand Up @@ -584,6 +598,9 @@ public function uninstall( $args, $assoc_args ) {
* Success: Updated 1/1 translation.
*
* @subcommand update
*
* @param string[] $args Positional arguments.
* @param array{'dry-run'?: bool, all?: bool} $assoc_args Associative arguments.
*/
public function update( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand Down
38 changes: 32 additions & 6 deletions src/Theme_Language_Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ class Theme_Language_Command extends WP_CLI\CommandWithTranslation {
* | az | Azerbaijani | uninstalled |
*
* @subcommand list
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, field?: string, format: string, theme?: string, language?: string, english_name?: string, native_name?: string, status?: string, update?: string, updated?: string} $assoc_args Associative arguments.
*/
public function list_( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand Down Expand Up @@ -194,8 +197,10 @@ function ( $file ) {
* 1
*
* @subcommand is-installed
*
* @param non-empty-array<string> $args Positional arguments.
*/
public function is_installed( $args, $assoc_args = array() ) {
public function is_installed( $args ) {
$theme = array_shift( $args );
$language_codes = (array) $args;

Expand Down Expand Up @@ -249,6 +254,9 @@ public function is_installed( $args, $assoc_args = array() ) {
* Success: Installed 1 of 1 languages.
*
* @subcommand install
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, format: string} $assoc_args Associative arguments.
*/
public function install( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand All @@ -272,7 +280,7 @@ public function install( $args, $assoc_args ) {
*/
private function install_one( $args, $assoc_args ) {
$theme = array_shift( $args );
$language_codes = (array) $args;
$language_codes = $args;
$count = count( $language_codes );

$available = $this->get_installed_languages( $theme );
Expand Down Expand Up @@ -315,7 +323,11 @@ private function install_one( $args, $assoc_args ) {
*/
private function install_many( $args, $assoc_args ) {
$language_codes = (array) $args;
$themes = wp_get_themes();

/**
* @var \WP_Theme[] $themes
*/
$themes = wp_get_themes();

if ( empty( $assoc_args['format'] ) ) {
$assoc_args['format'] = 'table';
Expand Down Expand Up @@ -343,22 +355,27 @@ private function install_many( $args, $assoc_args ) {

$available = $this->get_installed_languages( $theme_name );

/**
* @var string $display_name
*/
$display_name = $theme_details['Name'];

foreach ( $language_codes as $language_code ) {
$result = [
'name' => $theme_name,
'locale' => $language_code,
];

if ( in_array( $language_code, $available, true ) ) {
\WP_CLI::log( "Language '{$language_code}' for '{$theme_details['Name']}' already installed." );
\WP_CLI::log( "Language '{$language_code}' for '{$display_name}' already installed." );
$result['status'] = 'already installed';
++$skips;
} else {
$response = $this->download_language_pack( $language_code, $theme_name );

if ( is_wp_error( $response ) ) {
\WP_CLI::warning( $response );
\WP_CLI::log( "Language '{$language_code}' for '{$theme_details['Name']}' not installed." );
\WP_CLI::log( "Language '{$language_code}' for '{$display_name}' not installed." );

if ( 'not_found' === $response->get_error_code() ) {
$result['status'] = 'not available';
Expand All @@ -368,7 +385,7 @@ private function install_many( $args, $assoc_args ) {
++$errors;
}
} else {
\WP_CLI::log( "Language '{$language_code}' for '{$theme_details['Name']}' installed." );
\WP_CLI::log( "Language '{$language_code}' for '{$display_name}' installed." );
$result['status'] = 'installed';
++$successes;
}
Expand Down Expand Up @@ -423,6 +440,9 @@ private function install_many( $args, $assoc_args ) {
* Success: Uninstalled 1 of 1 languages.
*
* @subcommand uninstall
*
* @param string[] $args Positional arguments.
* @param array{all?: bool, format: string} $assoc_args Associative arguments.
*/
public function uninstall( $args, $assoc_args ) {
/** @var WP_Filesystem_Base $wp_filesystem */
Expand Down Expand Up @@ -481,6 +501,9 @@ public function uninstall( $args, $assoc_args ) {
// As of WP 4.0, no API for deleting a language pack
WP_Filesystem();

/**
* @var string $theme
*/
foreach ( $process_themes as $theme ) {
$available_languages = $this->get_installed_languages( $theme );

Expand Down Expand Up @@ -594,6 +617,9 @@ public function uninstall( $args, $assoc_args ) {
* Success: Updated 1/1 translation.
*
* @subcommand update
*
* @param string[] $args Positional arguments.
* @param array{'dry-run'?: bool, all?: bool} $assoc_args Associative arguments.
*/
public function update( $args, $assoc_args ) {
$all = \WP_CLI\Utils\get_flag_value( $assoc_args, 'all', false );
Expand Down
Loading