diff --git a/.github/workflows/php-static-analysis.yml b/.github/workflows/php-static-analysis.yml
new file mode 100644
index 0000000000000..9b15ee6f9f0fe
--- /dev/null
+++ b/.github/workflows/php-static-analysis.yml
@@ -0,0 +1,100 @@
+name: PHPStan Static Analysis
+
+on:
+ # PHPStan testing was introduced in @todo.
+ push:
+ branches:
+ - trunk
+ - '6.9'
+ - '[7-9].[0-9]'
+ tags:
+ - '6.9'
+ - '6.9.[0-9]+'
+ - '[7-9].[0-9]'
+ - '[7-9]+.[0-9].[0-9]+'
+ pull_request:
+ branches:
+ - trunk
+ - '6.9'
+ - '[7-9].[0-9]'
+ paths:
+ # This workflow only scans PHP files.
+ - '**.php'
+ # These files configure Composer. Changes could affect the outcome.
+ - 'composer.*'
+ # These files configure PHPStan. Changes could affect the outcome.
+ - 'phpstan.neon.dist'
+ - 'tests/phpstan/base.neon'
+ # Confirm any changes to relevant workflow files.
+ - '.github/workflows/php-static-analysis.yml'
+ - '.github/workflows/reusable-php-static-analysis.yml'
+ workflow_dispatch:
+
+# Cancels all previous workflow runs for pull requests that have not completed.
+concurrency:
+ # The concurrency group contains the workflow name and the branch name for pull requests
+ # or the commit hash for any other events.
+ group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
+jobs:
+ # Runs PHPStan Static Analysis.
+ phpstan:
+ name: PHP coding standards
+ uses: ./.github/workflows/reusable-php-static-analysis.yml
+ permissions:
+ contents: read
+ if: ${{ github.repository == 'WordPress/wordpress-develop' || ( github.event_name == 'pull_request' && github.actor != 'dependabot[bot]' ) }}
+
+ slack-notifications:
+ name: Slack Notifications
+ uses: ./.github/workflows/slack-notifications.yml
+ permissions:
+ actions: read
+ contents: read
+ needs: [ phpstan ]
+ if: ${{ github.repository == 'WordPress/wordpress-develop' && github.event_name != 'pull_request' && always() }}
+ with:
+ calling_status: ${{ contains( needs.*.result, 'cancelled' ) && 'cancelled' || contains( needs.*.result, 'failure' ) && 'failure' || 'success' }}
+ secrets:
+ SLACK_GHA_SUCCESS_WEBHOOK: ${{ secrets.SLACK_GHA_SUCCESS_WEBHOOK }}
+ SLACK_GHA_CANCELLED_WEBHOOK: ${{ secrets.SLACK_GHA_CANCELLED_WEBHOOK }}
+ SLACK_GHA_FIXED_WEBHOOK: ${{ secrets.SLACK_GHA_FIXED_WEBHOOK }}
+ SLACK_GHA_FAILURE_WEBHOOK: ${{ secrets.SLACK_GHA_FAILURE_WEBHOOK }}
+
+ failed-workflow:
+ name: Failed workflow tasks
+ runs-on: ubuntu-24.04
+ permissions:
+ actions: write
+ needs: [ slack-notifications ]
+ if: |
+ always() &&
+ github.repository == 'WordPress/wordpress-develop' &&
+ github.event_name != 'pull_request' &&
+ github.run_attempt < 2 &&
+ (
+ contains( needs.*.result, 'cancelled' ) ||
+ contains( needs.*.result, 'failure' )
+ )
+
+ steps:
+ - name: Dispatch workflow run
+ uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
+ with:
+ retries: 2
+ retry-exempt-status-codes: 418
+ script: |
+ github.rest.actions.createWorkflowDispatch({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ workflow_id: 'failed-workflow.yml',
+ ref: 'trunk',
+ inputs: {
+ run_id: `${context.runId}`,
+ }
+ });
diff --git a/.github/workflows/reusable-php-static-analysis.yml b/.github/workflows/reusable-php-static-analysis.yml
new file mode 100644
index 0000000000000..7dc01aec24ad4
--- /dev/null
+++ b/.github/workflows/reusable-php-static-analysis.yml
@@ -0,0 +1,95 @@
+##
+# A reusable workflow that runs PHP Static Analysis tests.
+##
+name: PHP Static Analysis
+
+on:
+ workflow_call:
+ inputs:
+ php-version:
+ description: 'The PHP version to use.'
+ required: false
+ type: 'string'
+ default: 'latest'
+
+# Disable permissions for all available scopes by default.
+# Any needed permissions should be configured at the job level.
+permissions: {}
+
+jobs:
+ # Runs PHP static analysis tests.
+ #
+ # Violations are reported inline with annotations.
+ #
+ # Performs the following steps:
+ # - Checks out the repository.
+ # - Sets up PHP.
+ # - Logs debug information.
+ # - Installs Composer dependencies.
+ # - Configures caching for PHP static analysis scans.
+ # - Make Composer packages available globally.
+ # - Runs PHPStan static analysis (with Pull Request annotations).
+ # - Saves the PHPStan result cache.
+ # - Ensures version-controlled files are not modified or deleted.
+ phpstan:
+ name: Run PHP static analysis
+ runs-on: ubuntu-24.04
+ permissions:
+ contents: read
+ timeout-minutes: 20
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+ with:
+ show-progress: ${{ runner.debug == '1' && 'true' || 'false' }}
+ persist-credentials: false
+
+ - name: Set up PHP
+ uses: shivammathur/setup-php@9e72090525849c5e82e596468b86eb55e9cc5401 # v2.32.0
+ with:
+ php-version: ${{ inputs.php-version }}
+ coverage: none
+ tools: cs2pr
+
+ - name: Log debug information
+ run: |
+ composer --version
+
+ # This date is used to ensure that the Composer cache is cleared at least once every week.
+ # http://man7.org/linux/man-pages/man1/date.1.html
+ - name: "Get last Monday's date"
+ id: get-date
+ run: echo "date=$(/bin/date -u --date='last Mon' "+%F")" >> "$GITHUB_OUTPUT"
+
+ # Since Composer dependencies are installed using `composer update` and no lock file is in version control,
+ # passing a custom cache suffix ensures that the cache is flushed at least once per week.
+ - name: Install Composer dependencies
+ uses: ramsey/composer-install@a2636af0004d1c0499ffca16ac0b4cc94df70565 # v3.1.0
+ with:
+ custom-cache-suffix: ${{ steps.get-date.outputs.date }}
+
+ - name: Make Composer packages available globally
+ run: echo "${PWD}/vendor/bin" >> "$GITHUB_PATH"
+
+ - name: Cache PHP Static Analysis scan cache
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ with:
+ path: .cache # This is defined in the base.neon file.
+ key: "phpstan-result-cache-${{ github.run_id }}"
+ restore-keys: |
+ phpstan-result-cache-
+
+ - name: Run PHP static analysis tests
+ id: phpstan
+ run: phpstan analyse -vvv --error-format=checkstyle | cs2pr
+
+ - name: "Save result cache"
+ uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
+ if: ${{ !cancelled() }}
+ with:
+ path: .cache
+ key: "phpstan-result-cache-${{ github.run_id }}"
+
+ - name: Ensure version-controlled files are not modified or deleted
+ run: git diff --exit-code
diff --git a/.gitignore b/.gitignore
index 01314e1a67139..ed8ecebd0f3e5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,6 +22,7 @@ wp-tests-config.php
/build
/tests/phpunit/build
/wp-cli.local.yml
+/phpstan.neon
/jsdoc
/composer.lock
/vendor
diff --git a/composer.json b/composer.json
index c636b2e7e680f..21a05b84cbd45 100644
--- a/composer.json
+++ b/composer.json
@@ -23,6 +23,7 @@
"squizlabs/php_codesniffer": "3.13.2",
"wp-coding-standards/wpcs": "~3.2.0",
"phpcompatibility/phpcompatibility-wp": "~2.1.3",
+ "phpstan/phpstan": "~2.1.31",
"yoast/phpunit-polyfills": "^1.1.0"
},
"config": {
@@ -32,6 +33,7 @@
"lock": false
},
"scripts": {
+ "analyse": "@php ./vendor/bin/phpstan analyse --memory-limit=2G",
"compat": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs --standard=phpcompat.xml.dist --report=summary,source",
"format": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcbf --report=summary,source",
"lint": "@php ./vendor/squizlabs/php_codesniffer/bin/phpcs --report=summary,source",
diff --git a/package.json b/package.json
index 7e2bab7284f68..b3a46f4f09dd6 100644
--- a/package.json
+++ b/package.json
@@ -192,6 +192,7 @@
"env:logs": "node ./tools/local-env/scripts/docker.js logs",
"env:pull": "node ./tools/local-env/scripts/docker.js pull",
"test:performance": "wp-scripts test-playwright --config tests/performance/playwright.config.js",
+ "test:php:stan": "node ./tools/local-env/scripts/docker.js run --rm php ./vendor/bin/phpstan analyse --memory-limit=2G",
"test:php": "node ./tools/local-env/scripts/docker.js run --rm php ./vendor/bin/phpunit",
"test:coverage": "npm run test:php -- --coverage-html ./coverage/html/ --coverage-php ./coverage/php/report.php --coverage-text=./coverage/text/report.txt",
"test:e2e": "wp-scripts test-playwright --config tests/e2e/playwright.config.js",
diff --git a/phpcs.xml.dist b/phpcs.xml.dist
index a8387b3604c9b..efb679fb6c13b 100644
--- a/phpcs.xml.dist
+++ b/phpcs.xml.dist
@@ -81,6 +81,9 @@
/tests/phpunit/build*
/tests/phpunit/data/*
+
+ /tests/phpstan/*
+
/tools/*
diff --git a/phpstan.neon.dist b/phpstan.neon.dist
new file mode 100644
index 0000000000000..b3dbacd0d322b
--- /dev/null
+++ b/phpstan.neon.dist
@@ -0,0 +1,55 @@
+# PHPStan configuration for WordPress Core.
+#
+# To overload this configuration, copy this file to phpstan.neon and adjust as needed.
+#
+# https://phpstan.org/config-reference
+
+includes:
+ # The WordPress Core configuration file includes the base configuration for the WordPress codebase.
+ - tests/phpstan/base.neon
+ # The baseline file includes preexisting errors in the codebase that should be ignored.
+ # https://phpstan.org/user-guide/baseline
+
+ - tests/phpstan/baseline.php # level 0.
+ - tests/phpstan/baseline/level-1.php
+ - tests/phpstan/baseline/level-2.php
+ - tests/phpstan/baseline/level-3.php
+ - tests/phpstan/baseline/level-4.php
+ - tests/phpstan/baseline/level-5.php
+ - tests/phpstan/baseline/level-6.php
+
+parameters:
+ level: 6
+ reportUnmatchedIgnoredErrors: true
+
+ ignoreErrors:
+ # Level 0:
+ - # Inner functions arent supported by PHPstan.
+ message: '#Function wxr_[a-z_]+ not found#'
+ path: src/wp-admin/includes/export.php
+ -
+ identifier: function.inner
+ path: src/wp-admin/includes/export.php
+ count: 13
+ -
+ identifier: function.inner
+ path: src/wp-admin/includes/file.php
+ count: 1
+ -
+ identifier: function.inner
+ path: src/wp-includes/canonical.php
+ count: 1
+
+ # Level 1:
+ - # These are too noisy at the moment.
+ message: '#Variable \$[a-zA-Z0-9_]+ might not be defined\.#'
+
+ # Level 2:
+ - # Callable-strings are used as callables in WordPress.
+ message: '#Default value of the parameter .* is incompatible with type callable.*#'
+
+ # Level 6:
+ - # WPCS syntax for iterable types is not supported.
+ identifier: missingType.iterableValue
+ - # Too noisy until `void` return types are allowed.
+ identifier: missingType.return
diff --git a/src/wp-admin/includes/class-wp-filesystem-ssh2.php b/src/wp-admin/includes/class-wp-filesystem-ssh2.php
index 9e0cb885b0bcc..30bd38c3cf2f2 100644
--- a/src/wp-admin/includes/class-wp-filesystem-ssh2.php
+++ b/src/wp-admin/includes/class-wp-filesystem-ssh2.php
@@ -672,6 +672,7 @@ public function size( $file ) {
* Default 0.
*/
public function touch( $file, $time = 0, $atime = 0 ) {
+ // @phpstan-ignore-next-line
// Not implemented.
}
diff --git a/src/wp-admin/press-this.php b/src/wp-admin/press-this.php
index c91df1c96b84b..45021964364a3 100644
--- a/src/wp-admin/press-this.php
+++ b/src/wp-admin/press-this.php
@@ -22,8 +22,8 @@ function wp_load_press_this() {
403
);
} elseif ( is_plugin_active( $plugin_file ) ) {
- include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php';
- $wp_press_this = new WP_Press_This_Plugin();
+ include WP_PLUGIN_DIR . '/press-this/class-wp-press-this-plugin.php'; // @phpstan-ignore include.fileNotFound
+ $wp_press_this = new WP_Press_This_Plugin(); // @phpstan-ignore class.notFound
$wp_press_this->html();
} elseif ( current_user_can( 'activate_plugins' ) ) {
if ( file_exists( WP_PLUGIN_DIR . '/' . $plugin_file ) ) {
diff --git a/src/wp-includes/class-wp-theme-json.php b/src/wp-includes/class-wp-theme-json.php
index 598f3ba918536..1e91fd3c39876 100644
--- a/src/wp-includes/class-wp-theme-json.php
+++ b/src/wp-includes/class-wp-theme-json.php
@@ -3365,7 +3365,7 @@ public function get_svg_filters( $origins ) {
* @param array $theme_json The theme.json like structure to inspect.
* @param array $path Path to inspect.
* @param bool|array $override Data to compute whether to override the preset.
- * @return bool
+ * @return bool|null True if the preset should override the defaults, false if not. Null if the override parameter is invalid.
*/
protected static function should_override_preset( $theme_json, $path, $override ) {
_deprecated_function( __METHOD__, '6.0.0', 'get_metadata_boolean' );
@@ -3400,6 +3400,8 @@ protected static function should_override_preset( $theme_json, $path, $override
return true;
}
+
+ return null;
}
/**
diff --git a/src/wp-includes/customize/class-wp-customize-background-image-setting.php b/src/wp-includes/customize/class-wp-customize-background-image-setting.php
index f56810e6aab4b..641540660c45d 100644
--- a/src/wp-includes/customize/class-wp-customize-background-image-setting.php
+++ b/src/wp-includes/customize/class-wp-customize-background-image-setting.php
@@ -28,6 +28,7 @@ final class WP_Customize_Background_Image_Setting extends WP_Customize_Setting {
* @since 3.4.0
*
* @param mixed $value The value to update. Not used.
+ * @return bool|void Nothing is returned.
*/
public function update( $value ) {
remove_theme_mod( 'background_image_thumb' );
diff --git a/src/wp-includes/customize/class-wp-customize-filter-setting.php b/src/wp-includes/customize/class-wp-customize-filter-setting.php
index ad70f4f853288..cf0ce2b2fb7ab 100644
--- a/src/wp-includes/customize/class-wp-customize-filter-setting.php
+++ b/src/wp-includes/customize/class-wp-customize-filter-setting.php
@@ -24,6 +24,7 @@ class WP_Customize_Filter_Setting extends WP_Customize_Setting {
* @since 3.4.0
*
* @param mixed $value The value to update.
+ * @return bool|void Nothing is returned.
*/
public function update( $value ) {}
}
diff --git a/src/wp-includes/customize/class-wp-customize-header-image-setting.php b/src/wp-includes/customize/class-wp-customize-header-image-setting.php
index 80333a54128af..cdf5128322717 100644
--- a/src/wp-includes/customize/class-wp-customize-header-image-setting.php
+++ b/src/wp-includes/customize/class-wp-customize-header-image-setting.php
@@ -32,6 +32,7 @@ final class WP_Customize_Header_Image_Setting extends WP_Customize_Setting {
* @global Custom_Image_Header $custom_image_header
*
* @param mixed $value The value to update.
+ * @return bool|void Nothing is returned.
*/
public function update( $value ) {
global $custom_image_header;
diff --git a/src/wp-includes/media.php b/src/wp-includes/media.php
index be41add6590b6..36fe095cb8394 100644
--- a/src/wp-includes/media.php
+++ b/src/wp-includes/media.php
@@ -4118,7 +4118,7 @@ function get_taxonomies_for_attachments( $output = 'names' ) {
* false otherwise.
*/
function is_gd_image( $image ) {
- if ( $image instanceof GdImage
+ if ( $image instanceof GdImage // @phpstan-ignore class.notFound (Only available with PHP8+.)
|| is_resource( $image ) && 'gd' === get_resource_type( $image )
) {
return true;
diff --git a/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php b/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php
index 4a82f28b8a41e..4cc7546cf39e5 100644
--- a/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php
+++ b/src/wp-includes/style-engine/class-wp-style-engine-css-rules-store.php
@@ -56,6 +56,7 @@ public static function get_store( $store_name = 'default' ) {
return;
}
if ( ! isset( static::$stores[ $store_name ] ) ) {
+ // @phpstan-ignore new.static (In PHPStan 2.x we can enforce with `@phpstan-consistent-constructor`)
static::$stores[ $store_name ] = new static();
// Set the store name.
static::$stores[ $store_name ]->set_name( $store_name );
diff --git a/src/wp-includes/template.php b/src/wp-includes/template.php
index 81b35fadf4883..3eda413710494 100644
--- a/src/wp-includes/template.php
+++ b/src/wp-includes/template.php
@@ -796,7 +796,7 @@ function load_template( $_template_file, $load_once = true, $args = array() ) {
}
if ( isset( $s ) ) {
- $s = esc_attr( $s );
+ $s = esc_attr( $s ); // @phpstan-ignore variable.undefined (It's extracted from query vars.)
}
/**
diff --git a/tests/phpstan/README.md b/tests/phpstan/README.md
new file mode 100644
index 0000000000000..8776ba37e6f8d
--- /dev/null
+++ b/tests/phpstan/README.md
@@ -0,0 +1,84 @@
+# PHPStan
+
+PHPStan is a static analysis tool for PHP that checks your code for errors without needing to execute the specific lines or write extra tests.
+
+## Running the tests
+
+PHPStan requires PHP and Composer dependencies to be installed.
+
+If you don't already have an environment ready, you can set one up by following [these instructions](https://github.com/WordPress/wordpress-develop/blob/master/README.md).
+
+Then you can launch the tests by running:
+
+```
+npm run test:php:stan
+```
+
+which will run PHPStan in the Docker container.
+
+Additional flags supported by PHPStan can be passed by passing `--` followed by the flags themselves. For example,
+
+```
+# to increase the memory limit from the default 2G to 4G:
+npm run test:php:stan -- --memory-limit=4G
+
+# to analyse only a specific file:
+npm run test:php:stan -- tests/phpstan/src/wp-includes/template.php
+
+# To scan with verbose debugging output:
+npm run test:php:stan -- -vvv --debug
+
+```
+
+If you are not using the Docker environment, you can run PHPStan via Composer directly:
+
+```
+composer run analyse
+
+compose run analyse -- --memory-limit=4G
+compose run analyse -- tests/phpstan/src/wp-includes/template.php
+compose run analyse -- -vvv --debug
+```
+
+For available flags, see https://phpstan.org/user-guide/command-line-usage.
+
+## The PHPStan configuration
+
+The PHPStan configuration file is located at [`phpstan.neon.dist`](../../phpstan.neon.dist).
+
+You can create a local copy at `phpstan.neon` to override the default configuration.
+
+For more information about configuring PHPStan, see the [PHPStan documentation's Config reference](https://phpstan.org/config-reference).
+
+## Ignoring errors
+
+As we adopt PHPStan iteratively, you may be faced with false positives due to legacy code, or code that is not worth changing at this time.
+
+PHPStan errors can be ignored in the following ways:
+
+- Using the `@phpstan-ignore {error-identifier} (Reason for ignoring)` annotation in the code. This should be used when addressing false positives.
+
+- Adding the error pattern to the `ignoreErrors` section of the `phpstan.neon` configuration file. This should be used when addressing conflicts between WordPress coding standards, or legacy code that is not worth refactoring just to satisfy the tests.
+
+- Adding an error to the "tech debt" baseline. This should be used for code that needs to be addressed eventually - by fixing, refactoring, or ignoring via one of the above methods - but is not worth addressing right now.
+
+ Baselines are a useful triage tool for handling PHPStan errors in legacy code, as they allow us to enforce stricter code quality checks on new code, while gradually chipping away at the existing issues over time. You should avoid adding PHPStan errors from new code whenever possible.
+
+ Baselining is done by running:
+
+ ```
+ npm run test:php:stan -- --generate-baseline=tests/phpstan/baseline.php
+
+ # or, with Composer directly:
+ composer run analyse -- --generate-baseline=tests/phpstan/baseline.php
+ ```
+
+ This will regenerate the baseline file with any new errors added to the existing ones. You can then commit the updated baseline file.
+
+## Performance and troubleshooting
+
+PHPStan can be resource-intensive, especially on large codebases like WordPress. If you encounter memory limit issues, you can increase the memory limit by passing the `--memory-limit` flag as shown above.
+
+PHPStan caches analysis results to speed up subsequent runs. You can see information about the results cache by running `analyse` with the `-vv` flag.
+
+Sometimes, due to the lack of type information in legacy code, PHPStan may still struggle to analyse certain parts of the codebase. In such cases, you can use the `--debug` flag to disable caching and see which files are causing issues.
diff --git a/tests/phpstan/base.neon b/tests/phpstan/base.neon
new file mode 100644
index 0000000000000..b7cb173b333f7
--- /dev/null
+++ b/tests/phpstan/base.neon
@@ -0,0 +1,127 @@
+# Base PHPStan configuration for WordPress Core.
+#
+# This is kept separate from the main PHPStan configuration file to allow for easy overloading while baseline errors are being fixed.
+#
+# https://phpstan.org/config-reference
+
+parameters:
+ # Cache is stored locally, so it's available for CI.
+ tmpDir: ../../.cache
+
+ # The Minimum PHP Version
+ phpVersion:
+ min: 70224
+ max: 80500
+
+ # If it's not enforced by PHP we can't assume users are passing valid values.
+ treatPhpDocTypesAsCertain: false
+
+ # These config options are explained in https://phpstan.org/config-reference
+ checkFunctionNameCase: true
+ inferPrivatePropertyTypeFromConstructor: true
+
+ # Constants whose values may differ depending on the install.
+ dynamicConstantNames:
+ - ALLOW_SUBDIRECTORY_INSTALL
+ - AUTH_SALT
+ - AUTOMATIC_UPDATER_DISABLED
+ - COOKIEPATH
+ - CUSTOM_TAGS
+ - DISALLOW_FILE_EDIT
+ - DISALLOW_UNFILTERED_HTML
+ - EMPTY_TRASH_DAYS
+ - ENFORCE_GZIP
+ - FORCE_SSL_LOGIN
+ - MEDIA_TRASH
+ - MULTISITE
+ - NOBLOGREDIRECT
+ - SAVEQUERIES
+ - SCRIPT_DEBUG
+ - SECRET_KEY
+ - SECRET_SALT
+ - SHORTINIT
+ - SITECOOKIEPATH
+ - UPLOADBLOGSDIR
+ - WP_ALLOW_MULTISITE
+ - WP_CACHE
+ - WP_DEBUG
+ - WP_DEBUG_DISPLAY
+ - WP_DEBUG_LOG
+ - WP_LANG_DIR
+ - WP_NETWORK_ADMIN
+ - WP_POST_REVISIONS
+ - WP_SITEURL
+ - WP_USE_THEMES
+ - WP_USER_ADMIN
+ - WPLANG
+ - WPMU_ACCEL_REDIRECT
+ - WPMU_PLUGIN_DIR
+ - WPMU_SENDFILE
+
+ # What directories and files should be scanned.
+ paths:
+ - ../../src
+ bootstrapFiles:
+ - bootstrap.php
+ scanFiles:
+ - ../../wp-config-sample.php
+ - ../../src/wp-admin/includes/ms.php
+ scanDirectories:
+ - ../../src/wp-includes
+ - ../../src/wp-admin
+ excludePaths:
+ analyseAndScan:
+ - ../../src/wp-admin/includes/noop.php
+ # These files are not part of the WordPress Core codebase.
+ - ../../src/wp-content
+ # JavaScript/CSS/Asset files.
+ - ../../src/wp-admin/css
+ - ../../src/wp-admin/images
+ # These are built from js/_enqueues.
+ - ../../src/wp-admin/js (?)
+ - ../../src/wp-includes/js (?)
+ analyse:
+ # These files are deprecated.
+ - ../../src/wp-admin/includes/deprecated.php
+ - ../../src/wp-admin/includes/ms-deprecated.php
+ - ../../src/wp-includes/deprecated.php
+ - ../../src/wp-includes/ms-deprecated.php
+ - ../../src/wp-includes/pluggable-deprecated.php
+ # These files are sourced by wordpress/gutenberg in `tools/release/sync-stable-blocks.js`.
+ - ../../src/wp-includes/blocks
+ # Third-party libraries.
+ - ../../src/js/_enqueues/vendor
+ - ../../src/wp-admin/includes/class-ftp-pure.php
+ - ../../src/wp-admin/includes/class-ftp-sockets.php
+ - ../../src/wp-admin/includes/class-ftp.php
+ - ../../src/wp-admin/includes/class-pclzip.php
+ - ../../src/wp-includes/atomlib.php
+ - ../../src/wp-includes/class-avif-info.php
+ - ../../src/wp-includes/class-IXR.php
+ - ../../src/wp-includes/class-json.php
+ - ../../src/wp-includes/class-phpass.php
+ - ../../src/wp-includes/class-pop3.php
+ - ../../src/wp-includes/class-requests.php
+ - ../../src/wp-includes/class-simplepie.php
+ - ../../src/wp-includes/class-snoopy.php
+ - ../../src/wp-includes/class-wp-feed-cache.php
+ - ../../src/wp-includes/class-wp-http-ixr-client.php
+ - ../../src/wp-includes/class-wp-http-requests-hooks.php
+ - ../../src/wp-includes/class-wp-http-requests-response.php
+ - ../../src/wp-includes/class-wp-simplepie-file.php
+ - ../../src/wp-includes/class-wp-simplepie-sanitize-kses.php
+ - ../../src/wp-includes/class-wp-text-diff-renderer-inline.php
+ - ../../src/wp-includes/class-wp-text-diff-renderer-table.php
+ - ../../src/wp-includes/rss.php
+ - ../../src/wp-includes/ID3
+ - ../../src/wp-includes/IXR
+ - ../../src/wp-includes/PHPMailer
+ - ../../src/wp-includes/pomo
+ - ../../src/wp-includes/Requests
+ - ../../src/wp-includes/SimplePie
+ - ../../src/wp-includes/sodium_compat
+ - ../../src/wp-includes/Text
+ # Contains errors that cannot be ignored by PHPStan.
+ - ../../src/wp-includes/html-api/class-wp-html-processor.php
+ # Setting `$metadata['user_pass'] = ''` (https://core.trac.wordpress.org/ticket/22114) causes PHPStan to hang
+ - ../../src/wp-includes/user.php
diff --git a/tests/phpstan/baseline.php b/tests/phpstan/baseline.php
new file mode 100644
index 0000000000000..646cbdbef630c
--- /dev/null
+++ b/tests/phpstan/baseline.php
@@ -0,0 +1,3 @@
+ '#^Call to function compact\\(\\) contains possibly undefined variable \\$comment_author\\.$#',
+ 'identifier' => 'variable.undefined',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function compact\\(\\) contains possibly undefined variable \\$comment_author_email\\.$#',
+ 'identifier' => 'variable.undefined',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function compact\\(\\) contains possibly undefined variable \\$comment_author_url\\.$#',
+ 'identifier' => 'variable.undefined',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function compact\\(\\) contains possibly undefined variable \\$user_id\\.$#',
+ 'identifier' => 'variable.undefined',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Variable \\$_POST in isset\\(\\) always exists and is not nullable\\.$#',
+ 'identifier' => 'isset.variable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-custom-image-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Constructor of class WP_Filesystem_Direct has an unused parameter \\$arg\\.$#',
+ 'identifier' => 'constructor.unusedParameter',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-direct.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Variable \\$class in empty\\(\\) always exists and is always falsy\\.$#',
+ 'identifier' => 'empty.variable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-posts-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^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' => '#^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 \\$modes_str in empty\\(\\) always exists and is not falsy\\.$#',
+ 'identifier' => 'empty.variable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wpdb.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/baseline/level-2.php b/tests/phpstan/baseline/level-2.php
new file mode 100644
index 0000000000000..52a9e45cf1550
--- /dev/null
+++ b/tests/phpstan/baseline/level-2.php
@@ -0,0 +1,1187 @@
+ '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/_index.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method inline_edit\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-tags.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method inline_edit\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to protected property WP_List_Table\\:\\:\\$screen\\.$#',
+ 'identifier' => 'property.protected',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/erase-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method embed_scripts\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/erase-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method process_bulk_action\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/erase-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to protected property WP_List_Table\\:\\:\\$screen\\.$#',
+ 'identifier' => 'property.protected',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/export-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method embed_scripts\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/export-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method process_bulk_action\\(\\) on WP_List_Table\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/export-personal-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to protected property WP_List_Table\\:\\:\\$screen\\.$#',
+ 'identifier' => 'property.protected',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$download_link on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$name on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$themes on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method get_error_message\\(\\) on array\\|object\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_List_Table\\:\\:display_rows\\(\\) invoked with 2 parameters, 0 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_List_Table\\:\\:single_row\\(\\) invoked with 2 parameters, 1 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_List_Table\\:\\:single_row\\(\\) invoked with 3 parameters, 1 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to an undefined method WP_Upgrader\\:\\:get_name_for_update\\(\\)\\.$#',
+ 'identifier' => 'method.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-language-pack-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader_Skin\\:\\:\\$language_update\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-language-pack-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader\\:\\:\\$new_plugin_data\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-installer-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to an undefined method WP_Upgrader\\:\\:plugin_info\\(\\)\\.$#',
+ 'identifier' => 'method.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-installer-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to an undefined method WP_Upgrader\\:\\:plugin_info\\(\\)\\.$#',
+ 'identifier' => 'method.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader_Skin\\:\\:\\$plugin_active\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader_Skin\\:\\:\\$plugin_info\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Upgrader_Skin\\:\\:before\\(\\) invoked with 1 parameter, 0 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-plugin-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader\\:\\:\\$new_theme_data\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-installer-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to an undefined method WP_Upgrader\\:\\:theme_info\\(\\)\\.$#',
+ 'identifier' => 'method.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-installer-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to an undefined method WP_Upgrader\\:\\:theme_info\\(\\)\\.$#',
+ 'identifier' => 'method.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader_Skin\\:\\:\\$api\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Upgrader_Skin\\:\\:\\$theme_info\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$download_link on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$name on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$version on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Upgrader_Skin\\:\\:before\\(\\) invoked with 1 parameter, 0 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-theme-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$attr_title\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$classes\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$menu_item_parent\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$object\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$object_id\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$target\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$title\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$type\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$url\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$xfn\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$classes\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$description\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$menu_item_parent\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$object\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$object_id\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$target\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$title\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$type\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$type_label\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$url\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$xfn\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$current on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-automatic-updater.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$response on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-automatic-updater.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$version on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-automatic-updater.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$author\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$name\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$parent_theme\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$version\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 6,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Theme\\:\\:\\$stylesheet\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 20,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Theme\\:\\:\\$template\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Binary operation "\\+" between non\\-empty\\-string and non\\-empty\\-string results in an error\\.$#',
+ 'identifier' => 'binaryOp.invalid',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-base.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Default value of the parameter \\#1 \\$opt \\(string\\) of method WP_Filesystem_FTPext\\:\\:__construct\\(\\) is incompatible with type array\\.$#',
+ 'identifier' => 'parameter.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ftpext.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Filesystem_FTPext\\:\\:\\$link has unknown class FTP\\\\Connection as its type\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ftpext.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Default value of the parameter \\#1 \\$opt \\(string\\) of method WP_Filesystem_ftpsockets\\:\\:__construct\\(\\) is incompatible with type array\\.$#',
+ 'identifier' => 'parameter.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ftpsockets.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Default value of the parameter \\#1 \\$opt \\(string\\) of method WP_Filesystem_SSH2\\:\\:__construct\\(\\) is incompatible with type array\\.$#',
+ 'identifier' => 'parameter.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ssh2.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$info on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-plugin-install-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$plugins on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-plugin-install-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$name\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 8,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-site-health.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$parent on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-terms-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$term_id on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-terms-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$info on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-theme-install-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$themes on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-theme-install-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method get_error_message\\(\\) on array\\|object\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-theme-install-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _crop_image_resource\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _flip_image_resource\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _rotate_image_resource\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\$img of function _crop_image_resource\\(\\) has invalid type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\$img of function _flip_image_resource\\(\\) has invalid type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\$img of function _rotate_image_resource\\(\\) has invalid type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$_wp_attachment_image_alt on array\\|WP_Post\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function load_image_to_edit\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$menu_order on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_content on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_title on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_List_Table\\:\\:display\\(\\) invoked with 1 parameter, 0 required\\.$#',
+ 'identifier' => 'arguments.count',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/meta-boxes.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$privacy_policy_page\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$front_or_home on array\\|WP_Post\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method get_error_message\\(\\) on array\\\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$author on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$downloaded on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$homepage on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$name on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$requires on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$sections on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 5,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$slug on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$tested on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$version on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin-install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Binary operation "\\*" between string and 1\\.0E\\-5 results in an error\\.$#',
+ 'identifier' => 'binaryOp.invalid',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Block_Type\\:\\:\\$uses_context\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Block_Type\\:\\:\\$variations\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$meta_key on object\\|true\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_id on object\\|true\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$posts on class\\-string\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Term\\:\\:\\$truncated_name\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/nav-menus.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to method html\\(\\) on an unknown class WP_Press_This_Plugin\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/press-this.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/profile.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Theme\\:\\:\\$version\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/update-core.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$download_link on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/update.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$name on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/update.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$version on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/update.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/upgrade.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$comment_shortcuts on WP_User\\|false\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/user-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-cron.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post_Type\\:\\:\\$capabilities\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/capabilities.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_category_by_path\\(\\) should return array\\|WP_Error\\|WP_Term\\|null but return statement is missing\\.$#',
+ 'identifier' => 'return.missing',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/category.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$current\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$title\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @param for parameter \\$block_type with type array\\ is incompatible with native type string\\.$#',
+ 'identifier' => 'parameter.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Block_Type\\:\\:\\$uses_context\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Classic_To_Block_Menu_Converter\\:\\:group_by_parent_id\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-classic-to-block-menu-converter.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Classic_To_Block_Menu_Converter\\:\\:to_blocks\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-classic-to-block-menu-converter.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$themes on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Binary operation "/" between string and 255 results in an error\\.$#',
+ 'identifier' => 'binaryOp.invalid',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @param for parameter \\$type contains unresolvable type\\.$#',
+ 'identifier' => 'parameter.unresolvableType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-feed-cache-transient.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Default value of the parameter \\#1 \\$width \\(false\\) of method WP_Image_Editor_GD\\:\\:update_size\\(\\) is incompatible with type int\\.$#',
+ 'identifier' => 'parameter.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-gd.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Default value of the parameter \\#2 \\$height \\(false\\) of method WP_Image_Editor_GD\\:\\:update_size\\(\\) is incompatible with type int\\.$#',
+ 'identifier' => 'parameter.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-gd.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Image_Editor_GD\\:\\:_resize\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-gd.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\$image of method WP_Image_Editor_GD\\:\\:_save\\(\\) has invalid type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-gd.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Image_Editor_GD\\:\\:\\$image has unknown class GdImage as its type\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-gd.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Image_Editor_Imagick\\:\\:set_imagick_time_limit\\(\\) should return int\\|null but return statement is missing\\.$#',
+ 'identifier' => 'return.missing',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-imagick.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:create_classic_menu_fallback\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:create_default_fallback\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_default_fallback_blocks\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_fallback_classic_menu\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_most_recently_created_nav_menu\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_most_recently_published_navigation\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_nav_menu_at_primary_location\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Navigation_Fallback\\:\\:get_nav_menu_with_primary_slug\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-navigation-fallback.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method get_error_code\\(\\) on object\\|false\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-oembed.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$ID on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var above assignment does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 9,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$object_id on array\\|WP_Error\\|WP_Term\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-term-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON_Resolver\\:\\:inject_variations_from_block_style_variation_files\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON_Resolver\\:\\:inject_variations_from_block_styles_registry\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON_Resolver\\:\\:recursively_iterate_json\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON_Resolver\\:\\:remove_json_comments\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON_Resolver\\:\\:style_variation_has_scope\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:compute_spacing_sizes\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:get_block_nodes\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:merge_spacing_sizes\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:remove_indirect_properties\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:resolve_custom_css_format\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:unwrap_shared_block_style_variations\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Theme_JSON\\:\\:update_separator_declarations\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Binary operation "\\+" between array\\|int\\\\|int\\<1, max\\> and 1 results in an error\\.$#',
+ 'identifier' => 'binaryOp.invalid',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/comment.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$term_id on string\\|WP_Customize_Setting\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-control.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$attr_title\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$db_id\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$description\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$type\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$type_label\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to an undefined property WP_Post\\:\\:\\$url\\.$#',
+ 'identifier' => 'property.notFound',
+ 'count' => 5,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Font_Face_Resolver\\:\\:convert_font_face_properties\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts/class-wp-font-face-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Font_Face_Resolver\\:\\:maybe_parse_name_from_comma_separated_list\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts/class-wp-font-face-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Font_Face_Resolver\\:\\:parse_settings\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts/class-wp-font-face-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Font_Face_Resolver\\:\\:to_kebab_case\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts/class-wp-font-face-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unsafe call to private method WP_Font_Face_Resolver\\:\\:to_theme_file_uri\\(\\) through static\\:\\:\\.$#',
+ 'identifier' => 'staticClassAccess.privateMethod',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts/class-wp-font-face-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @param references unknown parameter\\: \\$key$#',
+ 'identifier' => 'parameter.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @param references unknown parameter\\: \\$url$#',
+ 'identifier' => 'parameter.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @param references unknown parameter\\: \\$value$#',
+ 'identifier' => 'parameter.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/kses.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$link_id on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/link-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_imagecreatetruecolor\\(\\) has invalid return type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\$image of function is_gd_image\\(\\) has invalid type GdImage\\.$#',
+ 'identifier' => 'class.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$ID on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$plugins on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method add_data\\(\\) on array\\|object\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-block-directory-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Block_Type\\:\\:\\$uses_context\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Access to private property WP_Block_Type\\:\\:\\$variations\\.$#',
+ 'identifier' => 'property.private',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-block-types-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$auto_add on WP_Term\\|false\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-menus-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$download_link on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$language_packs on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method add_data\\(\\) on array\\|object\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot call method get_error_message\\(\\) on array\\|object\\.$#',
+ 'identifier' => 'method.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-plugins-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_content on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_excerpt on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$post_title on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$parent on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$template_name on array\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access property \\$term_id on array\\|object\\.$#',
+ 'identifier' => 'property.nonObject',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc tag @var does not specify variable name\\.$#',
+ 'identifier' => 'varTag.noVariable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/xmlrpc.php',
+];
+
+return ['parameters' => ['ignoreErrors' => $ignoreErrors]];
diff --git a/tests/phpstan/baseline/level-3.php b/tests/phpstan/baseline/level-3.php
new file mode 100644
index 0000000000000..c3428ea768737
--- /dev/null
+++ b/tests/phpstan/baseline/level-3.php
@@ -0,0 +1,779 @@
+ '#^Method WP_Automatic_Updater\\:\\:update\\(\\) should return WP_Error\\|null but returns false\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-automatic-updater.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access offset \'new_version\' on bool\\.$#',
+ 'identifier' => 'offsetAccess.nonOffsetAccessible',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Filesystem_Direct\\:\\:group\\(\\) should return string\\|false but returns int\\<1, max\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-direct.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Filesystem_Direct\\:\\:owner\\(\\) should return string\\|false but returns int\\<1, max\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-direct.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Filesystem_SSH2\\:\\:group\\(\\) should return string\\|false but returns int\\<1, max\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ssh2.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Filesystem_SSH2\\:\\:owner\\(\\) should return string\\|false but returns int\\<1, max\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ssh2.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Filesystem_SSH2\\:\\:\\$link \\(resource\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-filesystem-ssh2.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$comment_status \\(bool\\) of method WP_Post_Comments_List_Table\\:\\:get_per_page\\(\\) should be compatible with parameter \\$comment_status \\(string\\) of method WP_Comments_List_Table\\:\\:get_per_page\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-post-comments-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Screen\\:\\:get_help_tab\\(\\) should return array but returns null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-screen.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Screen\\:\\:get_option\\(\\) should return string but returns null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-screen.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Screen\\:\\:get_screen_reader_text\\(\\) should return string but returns null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-screen.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Screen\\:\\:\\$columns \\(int\\) does not accept string\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-screen.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset \'preview\' does not exist on array\\{activate\\: non\\-falsy\\-string\\}\\.$#',
+ 'identifier' => 'offsetAccess.notFound',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-themes-list-table.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function WP_Filesystem\\(\\) should return bool\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_get_nav_menu_to_edit\\(\\) should return string\\|WP_Error\\|null but returns WP_Term\\|false\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function delete_plugins\\(\\) should return bool\\|WP_Error\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_create_category\\(\\) should return int\\|WP_Error but returns string\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function convert_to_screen\\(\\) should return WP_Screen but returns object\\{id\\: string, base\\: string\\}&stdClass\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function delete_theme\\(\\) should return bool\\|WP_Error\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Cannot access offset \'new_version\' on bool\\.$#',
+ 'identifier' => 'offsetAccess.nonOffsetAccessible',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/update-core.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Block_Template\\:\\:\\$author \\(int\\|null\\) does not accept string\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-template-utils.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function filter_block_kses\\(\\) should return array but returns ArrayAccess&WP_Block_Parser_Block\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/blocks.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_category_by_path\\(\\) should return array\\|WP_Error\\|WP_Term\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/category.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#3 \\$args \\(stdClass\\) of method Walker_Nav_Menu\\:\\:end_lvl\\(\\) should be compatible with parameter \\$args \\(array\\) of method Walker\\:\\:end_lvl\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#3 \\$args \\(stdClass\\) of method Walker_Nav_Menu\\:\\:start_lvl\\(\\) should be compatible with parameter \\$args \\(array\\) of method Walker\\:\\:start_lvl\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#4 \\$args \\(stdClass\\) of method Walker_Nav_Menu\\:\\:end_el\\(\\) should be compatible with parameter \\$args \\(array\\) of method Walker\\:\\:end_el\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#4 \\$args \\(stdClass\\) of method Walker_Nav_Menu\\:\\:start_el\\(\\) should be compatible with parameter \\$args \\(array\\) of method Walker\\:\\:start_el\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property Walker_Nav_Menu\\:\\:\\$tree_type \\(string\\) does not accept default value of type array\\\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-walker-nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Block_Processor\\:\\:extract_block\\(\\) should return array\\\\|null but returns array\\\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Block_Processor\\:\\:extract_block\\(\\) should return array\\\\|null but returns array\\\\|string\\|null\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Block_Type\\:\\:__get\\(\\) should return array\\\\|string\\|void\\|null but returns array\\\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-type.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Block\\:\\:\\$inner_blocks \\(WP_Block_List\\) does not accept default value of type array\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Comment_Query\\:\\:\\$date_query \\(WP_Date_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-comment-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Comment_Query\\:\\:\\$meta_query \\(WP_Meta_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-comment-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Control\\:\\:\\$active_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-control.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Control\\:\\:\\$settings \\(array\\) does not accept string\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-control.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Panel\\:\\:\\$active_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-panel.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Panel\\:\\:\\$theme_supports \\(array\\\\) does not accept default value of type string\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-panel.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Section\\:\\:\\$active_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-section.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Setting\\:\\:\\$default \\(string\\) does not accept stdClass\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Setting\\:\\:\\$sanitize_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Setting\\:\\:\\$sanitize_js_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Setting\\:\\:\\$validate_callback \\(callable\\(\\)\\: mixed\\) does not accept default value of type \'\'\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Dependencies\\:\\:\\$all_queued_deps \\(array\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-dependencies.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^WpOrg\\\\Requests\\\\Cookie\\\\Jar does not accept WpOrg\\\\Requests\\\\Cookie\\.$#',
+ 'identifier' => 'offsetAssign.valueType',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Image_Editor_Imagick\\:\\:set_imagick_time_limit\\(\\) should return int\\|null but returns float\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-imagick.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Image_Editor_Imagick\\:\\:write_image\\(\\) should return WP_Error\\|true but returns bool\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-imagick.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Image_Editor_Imagick\\:\\:\\$image \\(Imagick\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-imagick.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Argument of an invalid type stdClass supplied for foreach, only iterables are supported\\.$#',
+ 'identifier' => 'foreach.nonIterable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-post-type.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Query\\:\\:setup_postdata\\(\\) should return true but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$date_query \\(WP_Date_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$meta_query \\(WP_Meta_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$queried_object_id \\(int\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$rules \\(array\\\\) does not accept string\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Site_Query\\:\\:\\$date_query \\(WP_Date_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-site-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Site_Query\\:\\:\\$meta_query \\(WP_Meta_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-site-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Speculation_Rules\\:\\:jsonSerialize\\(\\) should return array\\\\> but returns array\\\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-speculation-rules.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$query by\\-ref type of method WP_Tax_Query\\:\\:clean_query\\(\\) expects array, WP_Error given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-tax-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$query by\\-ref type of method WP_Tax_Query\\:\\:transform_query\\(\\) expects array, WP_Error given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-tax-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$query by\\-ref type of method WP_Tax_Query\\:\\:transform_query\\(\\) expects array, array\\\\|string given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-tax-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Term_Query\\:\\:get_terms\\(\\) should return array\\\\|string but returns int\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-term-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Term_Query\\:\\:\\$meta_query \\(WP_Meta_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-term-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Term_Query\\:\\:\\$terms \\(array\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-term-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Term\\:\\:\\$term_group \\(int\\) does not accept default value of type string\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-term.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$blocks \\(WP_Theme_JSON\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$core \\(WP_Theme_JSON\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$i18n_schema \\(array\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$theme \\(WP_Theme_JSON\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$user \\(WP_Theme_JSON\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme_JSON_Resolver\\:\\:\\$user_custom_post_type_id \\(int\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json-resolver.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$block_template_folders \\(array\\\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$block_theme \\(bool\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$errors \\(WP_Error\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$headers_sanitized \\(array\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$name_translated \\(string\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$parent \\(WP_Theme\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$template \\(string\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$textdomain_loaded \\(bool\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$theme_root_uri \\(string\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme\\:\\:\\$cache_expiration \\(bool\\) does not accept default value of type int\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme\\:\\:\\$cache_expiration \\(bool\\) does not accept int\\\\|int\\<1, max\\>\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$matched_token_byte_length by\\-ref type of method WP_Token_Map\\:\\:read_token\\(\\) expects int\\|null, \\(float\\|int\\) given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-token-map.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_User_Query\\:\\:\\$meta_query \\(WP_Meta_Query\\) does not accept default value of type false\\.$#',
+ 'identifier' => 'property.defaultValue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-user-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_User\\:\\:\\$roles \\(array\\\\) does not accept array\\\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-user.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method wp_xmlrpc_server\\:\\:wp_newTerm\\(\\) should return int\\|IXR_Error but returns string\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-xmlrpc-server.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property wpdb\\:\\:\\$col_info \\(array\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wpdb.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property wpdb\\:\\:\\$last_query \\(string\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wpdb.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$has_noncharacters by\\-ref type of function _wp_scan_utf8\\(\\) expects bool\\|null, int given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/compat-utf8.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc type array of property WP_Customize_Nav_Menu_Item_Setting\\:\\:\\$default is not covariant with PHPDoc type string of overridden property WP_Customize_Setting\\:\\:\\$default\\.$#',
+ 'identifier' => 'property.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$post_author \\(string\\) does not accept int\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Return type \\(void\\|null\\) of method WP_Customize_Nav_Menu_Item_Setting\\:\\:update\\(\\) should be compatible with return type \\(bool\\) of method WP_Customize_Setting\\:\\:update\\(\\)$#',
+ 'identifier' => 'method.childReturnType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Customize_Nav_Menu_Setting\\:\\:filter_wp_get_nav_menu_object\\(\\) should return object\\|null but returns false\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc type array of property WP_Customize_Nav_Menu_Setting\\:\\:\\$default is not covariant with PHPDoc type string of overridden property WP_Customize_Setting\\:\\:\\$default\\.$#',
+ 'identifier' => 'property.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Return type \\(void\\|null\\) of method WP_Customize_Nav_Menu_Setting\\:\\:update\\(\\) should be compatible with return type \\(bool\\) of method WP_Customize_Setting\\:\\:update\\(\\)$#',
+ 'identifier' => 'method.childReturnType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset \'basedir\' does not exist on string\\.$#',
+ 'identifier' => 'offsetAccess.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset \'baseurl\' does not exist on string\\.$#',
+ 'identifier' => 'offsetAccess.notFound',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/fonts.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_HTML_Decoder\\:\\:read_character_reference\\(\\) should return string\\|false but returns null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 7,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-decoder.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_HTML_Tag_Processor\\:\\:\\$is_closing_tag \\(bool\\) does not accept null\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_dropdown_languages\\(\\) should return string but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/l10n.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Translation_Controller\\:\\:get_entries\\(\\) should return array\\ but returns array\\\\>\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/l10n/class-wp-translation-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Translation_File\\:\\:entries\\(\\) should return array\\\\> but returns array\\\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/l10n/class-wp-translation-file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Translation_File\\:\\:\\$entries \\(array\\\\) does not accept array\\\\>\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/l10n/class-wp-translation-file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_edit_post_link\\(\\) should return string\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-includes/link-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_edit_term_link\\(\\) should return string\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/link-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_preview_post_link\\(\\) should return string\\|null but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/link-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function update_meta_cache\\(\\) should return array\\|false but returns bool\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/meta.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_update_nav_menu_item\\(\\) should return int\\|WP_Error but returns WP_Term\\|false\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_post_revision_title\\(\\) should return string\\|false but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_post_revision_title_expanded\\(\\) should return string\\|false but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_set_post_categories\\(\\) should return array\\|WP_Error\\|false but returns true\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_trash_post\\(\\) should return WP_Post\\|false\\|null but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_untrash_post\\(\\) should return WP_Post\\|false\\|null but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter &\\$result by\\-ref type of function _page_traverse_name\\(\\) expects array\\, array given\\.$#',
+ 'identifier' => 'parameterByRef.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc type false of property WP_REST_Attachments_Controller\\:\\:\\$allow_batch is not covariant with PHPDoc type array of overridden property WP_REST_Posts_Controller\\:\\:\\$allow_batch\\.$#',
+ 'identifier' => 'property.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_REST_Autosaves_Controller\\:\\:get_item\\(\\) should return WP_Error\\|WP_Post but returns WP_REST_Response\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_REST_Autosaves_Controller\\:\\:\\$revisions_controller \\(WP_REST_Revisions_Controller\\) does not accept WP_REST_Controller\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-autosaves-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_REST_Controller\\:\\:get_object_type\\(\\) should return string but returns null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc type false of property WP_REST_Font_Faces_Controller\\:\\:\\$allow_batch is not covariant with PHPDoc type array of overridden property WP_REST_Posts_Controller\\:\\:\\$allow_batch\\.$#',
+ 'identifier' => 'property.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^PHPDoc type false of property WP_REST_Font_Families_Controller\\:\\:\\$allow_batch is not covariant with PHPDoc type array of overridden property WP_REST_Posts_Controller\\:\\:\\$allow_batch\\.$#',
+ 'identifier' => 'property.phpDocType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$id \\(int\\) of method WP_REST_Global_Styles_Controller\\:\\:prepare_links\\(\\) should be compatible with parameter \\$post \\(WP_Post\\) of method WP_REST_Posts_Controller\\:\\:prepare_links\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-global-styles-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_REST_Template_Autosaves_Controller\\:\\:get_item\\(\\) should return WP_Error\\|WP_Post but returns WP_REST_Response\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_REST_Template_Autosaves_Controller\\:\\:\\$revisions_controller \\(WP_REST_Revisions_Controller\\) does not accept WP_REST_Controller\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$parent_template_id \\(string\\) of method WP_REST_Template_Revisions_Controller\\:\\:get_parent\\(\\) should be compatible with parameter \\$parent_post_id \\(int\\) of method WP_REST_Revisions_Controller\\:\\:get_parent\\(\\)$#',
+ 'identifier' => 'method.childParameterType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-template-revisions-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _wp_preview_post_thumbnail_filter\\(\\) should return array\\|null but returns string\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_delete_post_revision\\(\\) should return WP_Post\\|false\\|null but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_restore_post_revision\\(\\) should return int\\|false\\|null but returns array\\{\\}\\|null\\.$#',
+ 'identifier' => 'return.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Taxonomy\\:\\:\\$labels \\(stdClass\\) does not accept array\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _remove_theme_support\\(\\) should return bool but empty return statement found\\.$#',
+ 'identifier' => 'return.empty',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Widget_Media\\:\\:\\$l10n_defaults \\(array\\\\) does not accept array\\\\.$#',
+ 'identifier' => 'assign.propertyType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/widgets/class-wp-widget-media.php',
+];
+
+return ['parameters' => ['ignoreErrors' => $ignoreErrors]];
diff --git a/tests/phpstan/baseline/level-4.php b/tests/phpstan/baseline/level-4.php
new file mode 100644
index 0000000000000..2a5efe705eb39
--- /dev/null
+++ b/tests/phpstan/baseline/level-4.php
@@ -0,0 +1,1193 @@
+ '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/about.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/credits.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_array\\(\\) with array will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-custom-image-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-language-pack-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$post_type \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 3,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-checklist.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$post_status \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-walker-nav-menu-edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_string\\(\\) with bool will always evaluate to false\\.$#',
+ 'identifier' => 'function.impossibleType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Instanceof between Imagick and Imagick will always evaluate to true\\.$#',
+ 'identifier' => 'instanceof.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Ternary operator condition is always false\\.$#',
+ 'identifier' => 'ternary.alwaysFalse',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-debug-data.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset mixed on array\\{\\} in empty\\(\\) does not exist\\.$#',
+ 'identifier' => 'empty.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-internal-pointers.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static method WP_Internal_Pointers\\:\\:print_js\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-internal-pointers.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-internal-pointers.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Screen\\:\\:\\$post_type \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-screen.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-site-health.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-wp-upgrader.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/dashboard.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^While loop condition is always true\\.$#',
+ 'identifier' => 'while.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/dashboard.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function method_exists\\(\\) with \'ParagonIE_Sodium…\' and \'runtime_speed_test\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function WP_Filesystem\\(\\) never returns null so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/file.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_callable\\(\\) with \'exif_read_data\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_callable\\(\\) with \'iptcparse\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/image.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset \'created_timestamp\' on array\\{\\}\\|array\\{lossless\\?\\: mixed, bitrate\\?\\: int, bitrate_mode\\?\\: mixed, filesize\\?\\: int, mime_type\\?\\: mixed, length\\?\\: int, length_formatted\\?\\: mixed, width\\?\\: int, \\.\\.\\.\\} in empty\\(\\) does not exist\\.$#',
+ 'identifier' => 'empty.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^While loop condition is always true\\.$#',
+ 'identifier' => 'while.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_numeric\\(\\) with float\\|int\\|numeric\\-string will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function delete_plugins\\(\\) never returns null so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/plugin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Taxonomy\\:\\:\\$meta_box_sanitize_cb \\(callable\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function delete_theme\\(\\) never returns null so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always false\\.$#',
+ 'identifier' => 'booleanNot.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^If condition is always false\\.$#',
+ 'identifier' => 'if.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/install.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Ternary operator condition is always true\\.$#',
+ 'identifier' => 'ternary.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/menu-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Site\\:\\:\\$domain \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/my-sites.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset \\(float\\|int\\) on array\\ in isset\\(\\) always exists and is not nullable\\.$#',
+ 'identifier' => 'isset.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/nav-menus.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/network/sites.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between \'update\\-selected\' and mixed~\\(\'activate\'\\|\'activate\\-selected\'\\|\'deactivate\'\\|\'deactivate\\-selected\'\\|\'delete\\-selected\'\\|\'disable\\-auto\\-update\'\\|\'disable\\-auto\\-update\\-selected\'\\|\'enable\\-auto\\-update\'\\|\'enable\\-auto\\-update\\-selected\'\\|\'error_scrape\'\\|\'resume\'\\|\'update\\-selected\'\\) will always evaluate to false\\.$#',
+ 'identifier' => 'identical.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/plugins.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Left side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.leftAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/themes.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of && is always false\\.$#',
+ 'identifier' => 'booleanAnd.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/themes.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Block_Type\\:\\:\\$editor_style_handles \\(array\\\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-editor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset 1 on array\\{list\\, list\\\\} on left side of \\?\\? always exists and is not nullable\\.$#',
+ 'identifier' => 'nullCoalesce.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-supports/block-style-variations.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between null and string will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-supports/layout.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of \\|\\| is always true\\.$#',
+ 'identifier' => 'booleanOr.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-supports/position.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between \'sticky\' and \'sticky\' will always evaluate to true\\.$#',
+ 'identifier' => 'identical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-supports/position.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Left side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.leftAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-template-utils.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^While loop condition is always true\\.$#',
+ 'identifier' => 'while.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/block-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Left side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.leftAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/canonical.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/capabilities.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_string\\(\\) with string will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-bindings-registry.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Block_Bindings_Registry\\:\\:\\$supported_blocks is never read, only written\\.$#',
+ 'identifier' => 'property.onlyWritten',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-bindings-registry.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^If condition is always false\\.$#',
+ 'identifier' => 'if.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Block_Processor\\:\\:\\$last_error \\(string\\|null\\) is never assigned string so it can be removed from the property type\\.$#',
+ 'identifier' => 'property.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block-templates-registry.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of \\|\\| is always true\\.$#',
+ 'identifier' => 'booleanOr.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-block.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always false\\.$#',
+ 'identifier' => 'booleanNot.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-comment-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Control\\:\\:\\$active_callback \\(callable\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-control.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Control\\:\\:\\$settings \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-control.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$_changeset_post_id \\(int\\|false\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$_changeset_uuid \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$_post_values \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$nav_menus \\(WP_Customize_Nav_Menus\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$widgets \\(WP_Customize_Widgets\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of \\|\\| is always true\\.$#',
+ 'identifier' => 'booleanOr.rightAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-manager.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Panel\\:\\:\\$active_callback \\(callable\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-panel.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Section\\:\\:\\$active_callback \\(callable\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-section.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Setting\\:\\:\\$_previewed_blog_id \\(int\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Widgets\\:\\:\\$selective_refreshable_widgets \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-customize-widgets.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Dependencies\\:\\:\\$all_queued_deps \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-dependencies.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-dependencies.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Duotone\\:\\:\\$global_styles_block_names \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Duotone\\:\\:\\$global_styles_block_names is never written, only read\\.$#',
+ 'identifier' => 'property.onlyRead',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Duotone\\:\\:\\$global_styles_presets \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Duotone\\:\\:\\$global_styles_presets is never written, only read\\.$#',
+ 'identifier' => 'property.onlyRead',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-duotone.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Http_Cookie\\:\\:\\$domain \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Http_Cookie\\:\\:\\$name \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Http_Cookie\\:\\:\\$path \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Http_Cookie\\:\\:\\$port \\(int\\|string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Http_Cookie\\:\\:\\$value \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of \\|\\| is always false\\.$#',
+ 'identifier' => 'booleanOr.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http-cookie.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Http\\:\\:_dispatch_request\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-http.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function method_exists\\(\\) with \'Imagick\' and \'setIteratorIndex\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor-imagick.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_callable\\(\\) with \'exif_read_data\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-image-editor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$ID \\(int\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$queried_object_id \\(int\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$query \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$stopwords \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-query.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Recovery_Mode_Cookie_Service\\:\\:recovery_mode_hash\\(\\) never returns false so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-recovery-mode-cookie-service.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$author_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$comment_feed_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$date_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$feed_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$page_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Rewrite\\:\\:\\$search_structure \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between null and int\\|string will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 6,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-rewrite.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Script_Modules\\:\\:get_marked_for_enqueue\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-script-modules.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property _WP_Dependency\\:\\:\\$translations_path \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-scripts.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\<\\=" between 0 and int\\<0, max\\>\\|false is always true\\.$#',
+ 'identifier' => 'smallerOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme-json.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Theme\\:\\:parent\\(\\) never returns false so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$block_template_folders \\(array\\\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$block_theme \\(bool\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$headers_sanitized \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$name_translated \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$parent \\(WP_Theme\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$textdomain_loaded \\(bool\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Theme\\:\\:\\$theme_root_uri \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static method WP_Theme\\:\\:_check_headers_property_has_correct_type\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_Theme\\:\\:\\$persistently_cache \\(bool\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Static property WP_User\\:\\:\\$back_compat_keys \\(array\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-user.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-walker.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Widget\\:\\:\\$alt_option_name \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp-widget.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between \'404\' and \'404\' will always evaluate to true\\.$#',
+ 'identifier' => 'identical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wp.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property wpdb\\:\\:\\$base_prefix \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wpdb.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always false\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/class-wpdb.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _wp_scan_utf8\\(\\) never assigns null to &\\$has_noncharacters so it can be removed from the by\\-ref type\\.$#',
+ 'identifier' => 'parameterByRef.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/compat-utf8.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _wp_utf8_codepoint_span\\(\\) never assigns null to &\\$found_code_points so it can be removed from the by\\-ref type\\.$#',
+ 'identifier' => 'parameterByRef.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/compat-utf8.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Instanceof between mixed and ResourceBundle will always evaluate to false\\.$#',
+ 'identifier' => 'instanceof.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/compat.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Instanceof between mixed and SimpleXMLElement will always evaluate to false\\.$#',
+ 'identifier' => 'instanceof.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/compat.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$nav_menus \\(WP_Customize_Nav_Menus\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-item-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Manager\\:\\:\\$nav_menus \\(WP_Customize_Nav_Menus\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-nav-menu-setting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Partial\\:\\:\\$render_callback \\(callable\\) in empty\\(\\) is not falsy\\.$#',
+ 'identifier' => 'empty.property',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-partial.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Customize_Partial\\:\\:\\$settings \\(array\\\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/customize/class-wp-customize-partial.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^While loop condition is always false\\.$#',
+ 'identifier' => 'while.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/feed-rdf.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function method_exists\\(\\) with \'SimplePie_Cache\' and \'register\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/feed.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<2592000, 31535999\\> and 2592000 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<31536000, max\\> and 31536000 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<3600, 86399\\> and 3600 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<60, 3599\\> and 60 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<604800, 2591999\\> and 604800 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Comparison operation "\\>\\=" between int\\<86400, 604799\\> and 86400 is always true\\.$#',
+ 'identifier' => 'greaterOrEqual.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset 0 on array\\{0\\: non\\-empty\\-string, non_cdata_followed_by_cdata\\: \'\', 1\\: \'\', 2\\: \'\', cdata\\: \'\', 3\\: \'\', 4\\: \'\', non_cdata\\: string, \\.\\.\\.\\}\\|array\\{0\\: non\\-empty\\-string, non_cdata_followed_by_cdata\\: string, 1\\: string, 2\\: string, cdata\\: non\\-falsy\\-string, 3\\: non\\-falsy\\-string, 4\\: non\\-falsy\\-string\\} in isset\\(\\) always exists and is not nullable\\.$#',
+ 'identifier' => 'isset.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/formatting.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_callable\\(\\) with \'exif_imagetype\' will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset int\\<1, max\\> on non\\-empty\\-list\\ in isset\\(\\) always exists and is not nullable\\.$#',
+ 'identifier' => 'isset.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysTrue',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between \'Etc\' and \'Africa\'\\|\'America\'\\|\'Antarctica\'\\|\'Arctic\'\\|\'Asia\'\\|\'Atlantic\'\\|\'Australia\'\\|\'Europe\'\\|\'Indian\'\\|\'Pacific\' will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function single_cat_title\\(\\) never returns void so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/general-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function single_tag_title\\(\\) never returns void so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/general-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/general-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-doctype-info.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_HTML_Tag_Processor\\:\\:skip_rawtext\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_HTML_Tag_Processor\\:\\:skip_script_data\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_HTML_Tag_Processor\\:\\:\\$skip_newline_at \\(int\\|null\\) is never assigned int so it can be removed from the property type\\.$#',
+ 'identifier' => 'property.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_HTML_Text_Replacement\\:\\:\\$text \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.alwaysTrue',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between \'STATE_COMPLETE\' and \'STATE_READY\' will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between \'STATE_INCOMPLETE…\' and \'STATE_READY\' will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between \'STATE_MATCHED_TAG\' and \'STATE_READY\' will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between \'STATE_INCOMPLETE…\' and \'STATE_READY\' will always evaluate to false\\.$#',
+ 'identifier' => 'identical.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Unreachable statement \\- code above always terminates\\.$#',
+ 'identifier' => 'deadCode.unreachable',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/html-api/class-wp-html-tag-processor.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_array\\(\\) with array will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_bind_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_class_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_context_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_each_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_interactive_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_router_region_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_style_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Method WP_Interactivity_API\\:\\:data_wp_text_processor\\(\\) is unused\\.$#',
+ 'identifier' => 'method.unused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/interactivity-api/class-wp-interactivity-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/l10n.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$filter \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/link-template.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_string\\(\\) with bool will always evaluate to false\\.$#',
+ 'identifier' => 'function.impossibleType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/load.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^If condition is always false\\.$#',
+ 'identifier' => 'if.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/load.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Right side of && is always true\\.$#',
+ 'identifier' => 'booleanAnd.rightAlwaysTrue',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-includes/load.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function wp_imagecreatetruecolor\\(\\) never returns GdImage so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset 2 on array\\{string, non\\-empty\\-string, non\\-empty\\-string\\} in isset\\(\\) always exists and is not nullable\\.$#',
+ 'identifier' => 'isset.offset',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/media.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_array\\(\\) with non\\-empty\\-array\\ will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/ms-functions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always false\\.$#',
+ 'identifier' => 'booleanNot.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Term\\:\\:\\$term_id \\(int\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between 0 and int\\\\|int\\<1, max\\> will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between float\\|int\\|numeric\\-string and \'bottom\'\\|\'footer\'\\|\'header\'\\|\'main\'\\|\'menu\\-1\'\\|\'menu\\-2\'\\|\'navigation\'\\|\'primary\'\\|\'secondary\'\\|\'social\'\\|\'subsidiary\'\\|\'top\' will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/nav-menu.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Negated boolean expression is always true\\.$#',
+ 'identifier' => 'booleanNot.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/option.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between false and int will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/pluggable.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\!\\=\\= between null and int will always evaluate to true\\.$#',
+ 'identifier' => 'notIdentical.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/pluggable.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between 3000000000 and 2147483647 will always evaluate to false\\.$#',
+ 'identifier' => 'identical.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/pluggable.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to function is_array\\(\\) with non\\-empty\\-list\\{0\\?\\: string, 1\\?\\: non\\-falsy\\-string&numeric\\-string, 2\\?\\: numeric\\-string, 3\\?\\: numeric\\-string\\} will always evaluate to true\\.$#',
+ 'identifier' => 'function.alreadyNarrowedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$filter \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/post.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Offset mixed on array\\{\\} in isset\\(\\) does not exist\\.$#',
+ 'identifier' => 'isset.offset',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of && is always false\\.$#',
+ 'identifier' => 'booleanAnd.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Result of && is always false\\.$#',
+ 'identifier' => 'booleanAnd.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-attachments-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^If condition is always false\\.$#',
+ 'identifier' => 'if.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-comments-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$post_name \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post\\:\\:\\$post_title \\(string\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-font-families-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Post_Type\\:\\:\\$template \\(array\\\\) on left side of \\?\\? is not nullable\\.$#',
+ 'identifier' => 'nullCoalesce.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-post-types-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_REST_Template_Autosaves_Controller\\:\\:\\$parent_post_type is never read, only written\\.$#',
+ 'identifier' => 'property.onlyWritten',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Strict comparison using \\=\\=\\= between false and mixed will always evaluate to false\\.$#',
+ 'identifier' => 'identical.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/rest-api/endpoints/class-wp-rest-users-controller.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function _set_preview\\(\\) never returns false so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/revision.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Property WP_Query\\:\\:\\$max_num_pages \\(int\\) in isset\\(\\) is not nullable\\.$#',
+ 'identifier' => 'isset.property',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/sitemaps/providers/class-wp-sitemaps-posts.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function get_term_to_edit\\(\\) never returns int so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/taxonomy.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^While loop condition is always true\\.$#',
+ 'identifier' => 'while.alwaysTrue',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/theme-compat/embed.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function remove_theme_support\\(\\) never returns void so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-includes/theme.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^If condition is always false\\.$#',
+ 'identifier' => 'if.alwaysFalse',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-login.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Call to method WP_Theme\\:\\:load_textdomain\\(\\) on a separate line has no effect\\.$#',
+ 'identifier' => 'method.resultUnused',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-settings.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Function validate_another_blog_signup\\(\\) never returns null so it can be removed from the return type\\.$#',
+ 'identifier' => 'return.unusedType',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-signup.php',
+];
+
+return ['parameters' => ['ignoreErrors' => $ignoreErrors]];
diff --git a/tests/phpstan/baseline/level-5.php b/tests/phpstan/baseline/level-5.php
new file mode 100644
index 0000000000000..4b84609f4c554
--- /dev/null
+++ b/tests/phpstan/baseline/level-5.php
@@ -0,0 +1,1745 @@
+ '#^Parameter \\#1 \\$key of function remove_query_arg expects array\\\\|string, false given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-activate.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#3 \\$subject of function str_replace expects array\\\\|string, float given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/admin-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$post of function get_edit_post_link expects int\\|WP_Post, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/comment.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$post of function get_post_status expects int\\|WP_Post\\|null, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/comment.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$post of function get_the_title expects int\\|WP_Post, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/comment.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_attr expects string, bool given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/customize.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$position of function wp_comment_reply expects int, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-comments.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_attr expects string, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 5,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-comments.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$screen of function do_meta_boxes expects string\\|WP_Screen, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-form-advanced.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$screen of function do_meta_boxes expects string\\|WP_Screen, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-form-comment.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$screen of function do_meta_boxes expects string\\|WP_Screen, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-link-form.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#3 \\$name of function submit_button expects string, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit-tag-form.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$post of function get_edit_post_link expects int\\|WP_Post, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$post of function get_post_type expects int\\|WP_Post\\|null, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/edit.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$attachment of function wp_get_attachment_id3_keys expects WP_Post, stdClass given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$comment_id of function _wp_ajax_delete_comment_response expects int, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$message of function wp_die expects string\\|WP_Error, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 111,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$message of function wp_die expects string\\|WP_Error, int\\<1, max\\> given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 6,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_attr expects string, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#2 \\$arr2 of function array_diff expects an array of values castable to string, array\\ given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#2 \\$compare_from of function wp_get_revision_ui_diff expects int, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#3 \\$compare_to of function wp_get_revision_ui_diff expects int, string given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/ajax-actions.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#2 \\$gmt of function current_time expects bool, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/bookmark.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#2 \\$allowed_html of function wp_kses expects array\\\\|string, array\\\\|true\\> given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-automatic-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_attr expects string, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-bulk-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_js expects string, int given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 4,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-bulk-upgrader-skin.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function submit_button expects string, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-custom-background.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function esc_attr expects string, \\(float\\|int\\) given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 1,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-custom-image-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$text of function submit_button expects string, null given\\.$#',
+ 'identifier' => 'argument.type',
+ 'count' => 2,
+ 'path' => __DIR__ . '/../../../src/wp-admin/includes/class-custom-image-header.php',
+];
+$ignoreErrors[] = [
+ 'message' => '#^Parameter \\#1 \\$language_updates of method Language_Pack_Upgrader\\:\\:bulk_upgrade\\(\\) expects array\\