From 894e133d0cc9e4186c0faa408ac317d87115e5d9 Mon Sep 17 00:00:00 2001 From: desrosj Date: Wed, 25 Sep 2019 13:47:58 +0000 Subject: [PATCH] Build/Test Tools: Introduce automated PHP compatibility checking. This change introduces a new Composer script, `compat` that will scan the codebase for (detectable) potential PHP compatibility issues using the `PHP_CodeSniffer` and a custom ruleset based off of the `PHPCompayibilityWP` ruleset (`phpcompat.xml.dist`). The command will be run as a separate job within each Travis build. While many compatibility issues and false positives have already been corrected in this commit and other Trac tickets, there are still some remaining. For that reason, the job is allowed to fail while the remainder of the potential compatibility issues are investigated and addressed. After those are resolved, the job should be set as required to pass to help prevent new compatibility issues from being introduced. Props desrosj, jrf, all PHPCompatibilityWP and PHPCompatibility contributors. Fixes #46152. Built from https://develop.svn.wordpress.org/trunk@46290 git-svn-id: http://core.svn.wordpress.org/trunk@46102 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/class-wp-debug-data.php | 2 +- wp-admin/includes/class-wp-site-health.php | 4 ++-- wp-admin/includes/file.php | 3 +++ wp-admin/includes/upgrade.php | 2 +- wp-includes/author-template.php | 2 +- wp-includes/deprecated.php | 4 ++-- wp-includes/functions.php | 12 ++++++------ wp-includes/general-template.php | 2 +- wp-includes/version.php | 2 +- 9 files changed, 18 insertions(+), 15 deletions(-) diff --git a/wp-admin/includes/class-wp-debug-data.php b/wp-admin/includes/class-wp-debug-data.php index 4708e6187c..5ffec9825f 100644 --- a/wp-admin/includes/class-wp-debug-data.php +++ b/wp-admin/includes/class-wp-debug-data.php @@ -728,7 +728,7 @@ class WP_Debug_Data { if ( isset( $wpdb->use_mysqli ) && $wpdb->use_mysqli ) { $client_version = $wpdb->dbh->client_info; } else { - // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info,PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved if ( preg_match( '|[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}|', mysql_get_client_info(), $matches ) ) { $client_version = $matches[0]; } else { diff --git a/wp-admin/includes/class-wp-site-health.php b/wp-admin/includes/class-wp-site-health.php index 5f7c6bc7b7..27b29ad76f 100644 --- a/wp-admin/includes/class-wp-site-health.php +++ b/wp-admin/includes/class-wp-site-health.php @@ -158,7 +158,7 @@ class WP_Site_Health { // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_server_info $mysql_server_type = mysqli_get_server_info( $wpdb->dbh ); } else { - // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_server_info + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_server_info,PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved $mysql_server_type = mysql_get_server_info( $wpdb->dbh ); } @@ -1171,7 +1171,7 @@ class WP_Site_Health { // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysqli_get_client_info $mysql_client_version = mysqli_get_client_info(); } else { - // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info + // phpcs:ignore WordPress.DB.RestrictedFunctions.mysql_mysql_get_client_info,PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved $mysql_client_version = mysql_get_client_info(); } diff --git a/wp-admin/includes/file.php b/wp-admin/includes/file.php index 11977a8662..9cd626ec0b 100644 --- a/wp-admin/includes/file.php +++ b/wp-admin/includes/file.php @@ -1280,6 +1280,7 @@ function verify_file_signature( $filename, $signatures, $filename_for_errors = f ), array( 'php' => phpversion(), + // phpcs:ignore PHPCompatibility.Constants.NewConstants.sodium_library_versionFound 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), ) ); @@ -1313,6 +1314,7 @@ function verify_file_signature( $filename, $signatures, $filename_for_errors = f ), array( 'php' => phpversion(), + // phpcs:ignore PHPCompatibility.Constants.NewConstants.sodium_library_versionFound 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), 'polyfill_is_fast' => false, 'max_execution_time' => ini_get( 'max_execution_time' ), @@ -1386,6 +1388,7 @@ function verify_file_signature( $filename, $signatures, $filename_for_errors = f 'skipped_key' => $skipped_key, 'skipped_sig' => $skipped_signature, 'php' => phpversion(), + // phpcs:ignore PHPCompatibility.Constants.NewConstants.sodium_library_versionFound 'sodium' => defined( 'SODIUM_LIBRARY_VERSION' ) ? SODIUM_LIBRARY_VERSION : ( defined( 'ParagonIE_Sodium_Compat::VERSION_STRING' ) ? ParagonIE_Sodium_Compat::VERSION_STRING : false ), ) ); diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php index 79a23a6308..3b2d62da7c 100644 --- a/wp-admin/includes/upgrade.php +++ b/wp-admin/includes/upgrade.php @@ -2475,7 +2475,7 @@ function get_alloptions_110() { * @param string $setting Option name. * @return mixed */ -function __get_option( $setting ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __get_option( $setting ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore global $wpdb; if ( $setting == 'home' && defined( 'WP_HOME' ) ) { diff --git a/wp-includes/author-template.php b/wp-includes/author-template.php index 878fb9e409..a14b628909 100644 --- a/wp-includes/author-template.php +++ b/wp-includes/author-template.php @@ -565,6 +565,6 @@ function is_multi_author() { * @since 3.2.0 * @access private */ -function __clear_multi_author_cache() { //phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __clear_multi_author_cache() { //phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore delete_transient( 'is_multi_author' ); } diff --git a/wp-includes/deprecated.php b/wp-includes/deprecated.php index 215213f70b..98da670cc1 100644 --- a/wp-includes/deprecated.php +++ b/wp-includes/deprecated.php @@ -1798,7 +1798,7 @@ function _nc( $single, $plural, $number, $domain = 'default' ) { * @deprecated 2.8.0 Use _n() * @see _n() */ -function __ngettext( ...$args ) { +function __ngettext( ...$args ) { // phpcs:ignore PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore _deprecated_function( __FUNCTION__, '2.8.0', '_n()' ); return _n( ...$args ); } @@ -1810,7 +1810,7 @@ function __ngettext( ...$args ) { * @deprecated 2.8.0 Use _n_noop() * @see _n_noop() */ -function __ngettext_noop( ...$args ) { +function __ngettext_noop( ...$args ) { // phpcs:ignore PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore _deprecated_function( __FUNCTION__, '2.8.0', '_n_noop()' ); return _n_noop( ...$args ); diff --git a/wp-includes/functions.php b/wp-includes/functions.php index d3dded8078..c49b0e0e7e 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -5743,7 +5743,7 @@ function get_file_data( $file, $default_headers, $context = '' ) { * * @return true True. */ -function __return_true() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_true() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return true; } @@ -5758,7 +5758,7 @@ function __return_true() { // phpcs:ignore WordPress.NamingConventions.ValidFunc * * @return false False. */ -function __return_false() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_false() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return false; } @@ -5771,7 +5771,7 @@ function __return_false() { // phpcs:ignore WordPress.NamingConventions.ValidFun * * @return int 0. */ -function __return_zero() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_zero() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return 0; } @@ -5784,7 +5784,7 @@ function __return_zero() { // phpcs:ignore WordPress.NamingConventions.ValidFunc * * @return array Empty array. */ -function __return_empty_array() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_empty_array() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return array(); } @@ -5797,7 +5797,7 @@ function __return_empty_array() { // phpcs:ignore WordPress.NamingConventions.Va * * @return null Null value. */ -function __return_null() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_null() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return null; } @@ -5812,7 +5812,7 @@ function __return_null() { // phpcs:ignore WordPress.NamingConventions.ValidFunc * * @return string Empty string. */ -function __return_empty_string() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __return_empty_string() { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore return ''; } diff --git a/wp-includes/general-template.php b/wp-includes/general-template.php index 28d0e399e9..32d5595bb1 100644 --- a/wp-includes/general-template.php +++ b/wp-includes/general-template.php @@ -4684,7 +4684,7 @@ function readonly( $readonly, $current = true, $echo = true ) { * @param string $type The type of checked|selected|disabled|readonly we are doing * @return string html attribute or empty string */ -function __checked_selected_helper( $helper, $current, $echo, $type ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore +function __checked_selected_helper( $helper, $current, $echo, $type ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore if ( (string) $helper === (string) $current ) { $result = " $type='$type'"; } else { diff --git a/wp-includes/version.php b/wp-includes/version.php index c5be1abbc9..1eca9eefd4 100644 --- a/wp-includes/version.php +++ b/wp-includes/version.php @@ -13,7 +13,7 @@ * * @global string $wp_version */ -$wp_version = '5.3-beta1-46289'; +$wp_version = '5.3-beta1-46290'; /** * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.