diff --git a/composer.json b/composer.json index 17f53c2116f71..649a3d429324c 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "squizlabs/php_codesniffer": "3.13.5", "wp-coding-standards/wpcs": "~3.3.0", "phpcompatibility/phpcompatibility-wp": "~2.1.3", - "phpstan/phpstan": "2.1.39", + "phpstan/phpstan": "2.1.40", "yoast/phpunit-polyfills": "^1.1.0" }, "config": { diff --git a/phpstan.neon.dist b/phpstan.neon.dist index e74e6ec1a441b..10864210817df 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -14,7 +14,7 @@ includes: parameters: # https://phpstan.org/user-guide/rule-levels - level: 0 + level: 1 reportUnmatchedIgnoredErrors: true ignoreErrors: @@ -34,3 +34,518 @@ parameters: identifier: function.inner path: src/wp-includes/canonical.php count: 1 + + # Level 1: + - + identifier: variable.undefined + message: '#Variable \$_comments might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$_nav_menu_selected_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$_object might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$_wp_admin_css_colors might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$all_items might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$authors_dropdown might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$auto_update_notice might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$auto_updates might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$b might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$badge_class might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$badge_title might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$blog_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$cache_found might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$cache_key might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$cached might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$callback might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$cat_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$cats might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$class might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$closer_potentially_starts_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comment might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comment_closing_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comment_ids might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comment_opening_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comment_status might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$comments might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$compat might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$context might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$control might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$control_callback might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$current_blog might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$current_screen might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$current_site might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$current_user might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$description might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$docs_select might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$end might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$error might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$filter_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$gen might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$h1 might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$has_closer might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$has_void_flag might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$height might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$html might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$icon might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$image might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$is_IE might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$is_caddy might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$is_nginx might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$item_name might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$json_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$json_length might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$k might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$key might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$link might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$linkcheck might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$manage_url might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$matches might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$message might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$messages might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$metakey might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$mime might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$my_year might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$name might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$name_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$name_length might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$namespace_at might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$network might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$network_current might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$next_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$node might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$num_posts might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$old_user_data might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$option might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$options_to_update might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$original_content might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$original_result might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$output might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$page might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$paged might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$parent might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$parts might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$plugin_name might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$plugins might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$post might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$post_author might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$post_meta might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$post_type_cap might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$posts might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$primary might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$processed_response might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$query might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$redirect might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$required_mysql_version might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$required_php_version might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$resized might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$response might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$restore_link might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$result might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$return_to_post might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$revision might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$rollback_result might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$rootcommentmatch might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$rootcommentquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$rp_key might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$rp_login might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$s might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$secret_keys might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$section_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$self might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$show_network_active might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$stat might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$status might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1 might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1comment might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1embed might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1feed might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1feed2 might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub1tb might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2 might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2comment might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2embed might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2feed might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2feed2 might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$sub2tb might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subcommentquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subembedquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subfeedquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subject might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$submenu might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$subtbquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$tab might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$table_prefix might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$tag might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$tag_ID might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$tax might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$taxnow might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$taxonomy might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$text might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$title might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$token_length might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$trackbackmatch might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$trackbackquery might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$type might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$typenow might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$unique_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$update might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$update_data might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$upgrader might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$user_ID might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$user_email might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$user_id might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$user_login might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$usersearch might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$version_url might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$was_active might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$width might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$working_dir_local might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_db_version might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_filter might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_query might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_registered_sidebars might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_registered_widget_controls might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_registered_widget_updates might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_rewrite might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_roles might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wp_version might not be defined\.#' + - + identifier: variable.undefined + message: '#Variable \$wpdb might not be defined\.#' diff --git a/src/wp-admin/includes/class-custom-image-header.php b/src/wp-admin/includes/class-custom-image-header.php index eb65605728062..2c0eb26c0fc9a 100644 --- a/src/wp-admin/includes/class-custom-image-header.php +++ b/src/wp-admin/includes/class-custom-image-header.php @@ -841,7 +841,7 @@ public function step_2() { $file = get_attached_file( $attachment_id, true ); $url = wp_get_attachment_image_src( $attachment_id, 'full' ); $url = $url[0]; - } elseif ( isset( $_POST ) ) { + } else { $data = $this->step_2_manage_upload(); $attachment_id = $data['attachment_id']; $file = $data['file']; diff --git a/src/wp-admin/includes/class-wp-filesystem-direct.php b/src/wp-admin/includes/class-wp-filesystem-direct.php index a4b197c15229f..34862a661d321 100644 --- a/src/wp-admin/includes/class-wp-filesystem-direct.php +++ b/src/wp-admin/includes/class-wp-filesystem-direct.php @@ -19,10 +19,8 @@ class WP_Filesystem_Direct extends WP_Filesystem_Base { * Constructor. * * @since 2.5.0 - * - * @param mixed $arg Not used. */ - public function __construct( $arg ) { + public function __construct() { $this->method = 'direct'; $this->errors = new WP_Error(); } diff --git a/src/wp-admin/includes/class-wp-posts-list-table.php b/src/wp-admin/includes/class-wp-posts-list-table.php index f9c08ad5c73ee..ae444905ac79f 100644 --- a/src/wp-admin/includes/class-wp-posts-list-table.php +++ b/src/wp-admin/includes/class-wp-posts-list-table.php @@ -298,7 +298,6 @@ protected function get_views() { $status_links = array(); $num_posts = wp_count_posts( $post_type, 'readable' ); $total_posts = array_sum( (array) $num_posts ); - $class = ''; $current_user_id = get_current_user_id(); $all_args = array( 'post_type' => $post_type ); @@ -310,10 +309,6 @@ protected function get_views() { } if ( $this->user_posts_count && $this->user_posts_count !== $total_posts ) { - if ( isset( $_GET['author'] ) && ( $current_user_id === (int) $_GET['author'] ) ) { - $class = 'current'; - } - $mine_args = array( 'post_type' => $post_type, 'author' => $current_user_id, @@ -337,7 +332,6 @@ protected function get_views() { ); $all_args['all_posts'] = 1; - $class = ''; } $all_inner_html = sprintf( @@ -354,7 +348,7 @@ protected function get_views() { $status_links['all'] = array( 'url' => esc_url( add_query_arg( $all_args, 'edit.php' ) ), 'label' => $all_inner_html, - 'current' => empty( $class ) && ( $this->is_base_request() || isset( $_REQUEST['all_posts'] ) ), + 'current' => ( $this->is_base_request() || isset( $_REQUEST['all_posts'] ) ), ); if ( $mine ) { @@ -362,18 +356,12 @@ protected function get_views() { } foreach ( get_post_stati( array( 'show_in_admin_status_list' => true ), 'objects' ) as $status ) { - $class = ''; - $status_name = $status->name; if ( ! in_array( $status_name, $avail_post_stati, true ) || empty( $num_posts->$status_name ) ) { continue; } - if ( isset( $_REQUEST['post_status'] ) && $status_name === $_REQUEST['post_status'] ) { - $class = 'current'; - } - $status_args = array( 'post_status' => $status_name, 'post_type' => $post_type, @@ -392,8 +380,6 @@ protected function get_views() { } if ( ! empty( $this->sticky_posts_count ) ) { - $class = ! empty( $_REQUEST['show_sticky'] ) ? 'current' : ''; - $sticky_args = array( 'post_type' => $post_type, 'show_sticky' => 1, diff --git a/src/wp-includes/cache-compat.php b/src/wp-includes/cache-compat.php index fe0e29c107b64..6f8842ab04ae0 100644 --- a/src/wp-includes/cache-compat.php +++ b/src/wp-includes/cache-compat.php @@ -327,11 +327,11 @@ function wp_cache_set_multiple_salted( $data, $group, $salt, $expire = 0 ) { * * @param int $blog_id Site ID. */ - function wp_cache_switch_to_blog( $blog_id ) { + function wp_cache_switch_to_blog( $blog_id ): void { global $wp_object_cache; // Attempt to use the drop-in object cache method if it exists. - if ( method_exists( $wp_object_cache, 'switch_to_blog' ) ) { + if ( is_object( $wp_object_cache ) && method_exists( $wp_object_cache, 'switch_to_blog' ) ) { $wp_object_cache->switch_to_blog( $blog_id ); return; } @@ -340,6 +340,6 @@ function wp_cache_switch_to_blog( $blog_id ) { * Perform a fallback blog switch, which will reinitialize the caches * for the new blog ID. */ - wp_cache_switch_to_blog_fallback( $blog_id ); + wp_cache_switch_to_blog_fallback(); } endif; diff --git a/src/wp-includes/class-wpdb.php b/src/wp-includes/class-wpdb.php index 23c865b87d817..60026dbdc5c16 100644 --- a/src/wp-includes/class-wpdb.php +++ b/src/wp-includes/class-wpdb.php @@ -2117,7 +2117,9 @@ public function parse_db_host( $host ) { * @since 3.9.0 * * @param bool $allow_bail Optional. Allows the function to bail. Default true. - * @return bool|void True if the connection is up. + * @return bool Whether the connection is up. Exits when `$allow_bail` is true and the connection is down. + * + * @phpstan-return ( $allow_bail is true ? bool|never : bool ) */ public function check_connection( $allow_bail = true ) { // Check if the connection is alive. diff --git a/src/wp-includes/functions.php b/src/wp-includes/functions.php index 9ed5346b3bc35..df4f940ceb020 100644 --- a/src/wp-includes/functions.php +++ b/src/wp-includes/functions.php @@ -3776,7 +3776,7 @@ function wp_nonce_ays( $action ) { * } * @return never|void Returns void if `$args['exit']` is false, otherwise exits. * - * @phpstan-return ( $args['exit'] is false ? void : never ) + * @phpstan-return ( $args is array{exit: false} ? void : never ) */ function wp_die( $message = '', $title = '', $args = array() ) { global $wp_query; @@ -5511,6 +5511,8 @@ function wp_ob_end_flush_all() { * @since 2.3.2 * * @global wpdb $wpdb WordPress database abstraction object. + * + * @return never */ function dead_db() { global $wpdb; diff --git a/src/wp-includes/theme-compat/embed-content.php b/src/wp-includes/theme-compat/embed-content.php index 42884fec0c5bc..8bf961ba2dace 100644 --- a/src/wp-includes/theme-compat/embed-content.php +++ b/src/wp-includes/theme-compat/embed-content.php @@ -13,6 +13,7 @@
> . + - ../../src/wp-includes/build # These files are sourced by wordpress/gutenberg in `tools/release/sync-stable-blocks.js`. - ../../src/wp-includes/blocks # Third-party libraries. diff --git a/tests/phpstan/baseline.php b/tests/phpstan/baseline.php index 646cbdbef630c..24b1c4aac44a8 100644 --- a/tests/phpstan/baseline.php +++ b/tests/phpstan/baseline.php @@ -1,3 +1,95 @@ '#^Variable \\$_POST in isset\\(\\) always exists and is not nullable\\.$#', + 'identifier' => 'isset.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-admin/includes/media.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$parent_file in empty\\(\\) always exists and is not falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-admin/themes.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Function twentyseventeen_edit_link invoked with 1 parameter, 0 required\\.$#', + 'identifier' => 'arguments.count', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-content/themes/twentyseventeen/template-parts/page/content-front-page-panels.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Function twentyseventeen_edit_link invoked with 1 parameter, 0 required\\.$#', + 'identifier' => 'arguments.count', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-content/themes/twentyseventeen/template-parts/page/content-front-page.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Function twentyseventeen_edit_link invoked with 1 parameter, 0 required\\.$#', + 'identifier' => 'arguments.count', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-content/themes/twentyseventeen/template-parts/page/content-page.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$addl_path in empty\\(\\) always exists and is always falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/canonical.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$namespace in isset\\(\\) always exists and is not nullable\\.$#', + 'identifier' => 'isset.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/class-wp-block-parser.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$block_type in empty\\(\\) always exists and is not falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/class-wp-block-supports.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$loader in isset\\(\\) always exists and is not nullable\\.$#', + 'identifier' => 'isset.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/class-wp-oembed.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$search in empty\\(\\) always exists and is not falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/class-wp-query.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$status_type_clauses in empty\\(\\) always exists and is not falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/class-wp-query.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$deprecated in empty\\(\\) always exists and is always falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/pluggable.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$schema in empty\\(\\) is never defined\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$the_parent in empty\\(\\) always exists and is not falsy\\.$#', + 'identifier' => 'empty.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/taxonomy.php', +]; +$ignoreErrors[] = [ + 'message' => '#^Variable \\$s in isset\\(\\) is never defined\\.$#', + 'identifier' => 'isset.variable', + 'count' => 1, + 'path' => __DIR__ . '/../../src/wp-includes/template.php', +]; + +return ['parameters' => ['ignoreErrors' => $ignoreErrors]]; diff --git a/tests/phpstan/bootstrap.php b/tests/phpstan/bootstrap.php index c87a26babf83d..77a597609270e 100644 --- a/tests/phpstan/bootstrap.php +++ b/tests/phpstan/bootstrap.php @@ -93,3 +93,12 @@ define( 'FS_TIMEOUT', 1 ); define( 'FS_CHMOD_DIR', 1 ); define( 'FS_CHMOD_FILE', 1 ); + +// Theme constants referenced in add_theme_support(). +define( 'NO_HEADER_TEXT', false ); +define( 'HEADER_IMAGE_WIDTH', 0 ); +define( 'HEADER_IMAGE_HEIGHT', 0 ); +define( 'HEADER_TEXTCOLOR', '' ); +define( 'HEADER_IMAGE', '' ); +define( 'BACKGROUND_COLOR', '' ); +define( 'BACKGROUND_IMAGE', '' );