diff --git a/composer.json b/composer.json index e9d4435a..00792969 100644 --- a/composer.json +++ b/composer.json @@ -15,14 +15,15 @@ "wp-cli/wp-cli": "^2.12" }, "require-dev": { - "wp-cli/wp-cli-tests": "^4" + "wp-cli/wp-cli-tests": "^5" }, "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 }, @@ -59,12 +60,14 @@ "behat-rerun": "rerun-behat-tests", "lint": "run-linter-tests", "phpcs": "run-phpcs-tests", + "phpstan": "run-phpstan-tests", "phpunit": "run-php-unit-tests", "phpcbf": "run-phpcbf-cleanup", "prepare-tests": "install-package-tests", "test": [ "@lint", "@phpcs", + "@phpstan", "@phpunit", "@behat" ] diff --git a/phpstan.neon.dist b/phpstan.neon.dist new file mode 100644 index 00000000..ca9e0ea4 --- /dev/null +++ b/phpstan.neon.dist @@ -0,0 +1,13 @@ +parameters: + level: 9 + paths: + - src + - role-command.php + scanDirectories: + - vendor/wp-cli/wp-cli/php + scanFiles: + - vendor/php-stubs/wordpress-stubs/wordpress-stubs.php + treatPhpDocTypesAsCertain: false + ignoreErrors: + - identifier: missingType.parameter + - identifier: missingType.return diff --git a/src/Capabilities_Command.php b/src/Capabilities_Command.php index e27a0cb1..97db2033 100644 --- a/src/Capabilities_Command.php +++ b/src/Capabilities_Command.php @@ -26,7 +26,7 @@ class Capabilities_Command extends WP_CLI_Command { /** * List of available fields. * - * @var array + * @var array */ private $fields = [ 'name' ]; diff --git a/src/Role_Command.php b/src/Role_Command.php index 0fe78d58..a029d2a3 100644 --- a/src/Role_Command.php +++ b/src/Role_Command.php @@ -42,14 +42,14 @@ class Role_Command extends WP_CLI_Command { /** * List of available fields. * - * @var array + * @var array */ private $fields = [ 'name', 'role' ]; /** * Default roles as provided by WordPress Core. * - * @var array + * @var array */ private $roles = [ 'administrator', 'editor', 'author', 'contributor', 'subscriber' ]; @@ -347,13 +347,17 @@ public function reset( $args, $assoc_args ) { remove_role( $role ); } + /** + * @var array $preserve + */ + // Put back all default roles and capabilities. populate_roles(); // Restore the preserved roles. foreach ( $preserve as $k => $roleobj ) { // Re-remove after populating. - if ( is_a( $roleobj, 'WP_Role' ) ) { + if ( $roleobj instanceof \WP_Role ) { remove_role( $roleobj->name ); add_role( $roleobj->name, ucwords( $roleobj->name ), $roleobj->capabilities ); } else { @@ -373,13 +377,15 @@ public function reset( $args, $assoc_args ) { if ( $after[ $role_key ] != $before[ $role_key ] ) { ++$num_reset; $before_capabilities = isset( $before[ $role_key ] ) ? $before[ $role_key ]->capabilities : []; - $restored_cap = array_diff_key( $after[ $role_key ]->capabilities, $before_capabilities ); - $removed_cap = array_diff_key( $before_capabilities, $after[ $role_key ]->capabilities ); - $restored_cap_count = count( $restored_cap ); - $removed_cap_count = count( $removed_cap ); - $restored_text = ( 1 === $restored_cap_count ) ? '%d capability' : '%d capabilities'; - $removed_text = ( 1 === $removed_cap_count ) ? '%d capability' : '%d capabilities'; - $message = "Restored {$restored_text} to and removed {$removed_text} from '%s' role."; + // @phpstan-ignore property.nonObject + $restored_cap = array_diff_key( $after[ $role_key ]->capabilities, $before_capabilities ); + // @phpstan-ignore property.nonObject + $removed_cap = array_diff_key( $before_capabilities, $after[ $role_key ]->capabilities ); + $restored_cap_count = count( $restored_cap ); + $removed_cap_count = count( $removed_cap ); + $restored_text = ( 1 === $restored_cap_count ) ? '%d capability' : '%d capabilities'; + $removed_text = ( 1 === $removed_cap_count ) ? '%d capability' : '%d capabilities'; + $message = "Restored {$restored_text} to and removed {$removed_text} from '%s' role."; WP_CLI::log( sprintf( $message, $restored_cap_count, $removed_cap_count, $role_key ) ); } else { WP_CLI::log( "No changes necessary for '{$role_key}' role." );