Coding Standards: Remove unnecessary ignore annotations in `dbDelta()`.

It is perfectly possible to write a commented regex with layout for readability by using the `x` modifier.

As per the manual:
> x (`PCRE_EXTENDED`)
>
> If this modifier is set, whitespace data characters in the pattern are totally ignored except when escaped or inside a character class, and characters between an unescaped # outside a character class and the next newline character, inclusive, are also ignored. This is equivalent to Perl's /x modifier, and makes it possible to include commentary inside complicated patterns.
>
> Note, however, that this applies only to data characters. Whitespace characters may never appear within special character sequences in a pattern, for example within the sequence (?( which introduces a conditional subpattern.

Reference: [https://www.php.net/manual/en/reference.pcre.pattern.modifiers.php PHP Manual: Pattern Modifiers].

This commit rewrites these two regexes to use the `x` modifier and gets rid of the unnecessary `phpcs:disable` comments.

The tests in the `tests/phpunit/tests/db/dbDelta.php` file cover this change.

Follow-up to [42249].

Props jrf.
See .
Built from https://develop.svn.wordpress.org/trunk@57061


git-svn-id: http://core.svn.wordpress.org/trunk@56572 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
Sergey Biryukov 2023-11-04 00:26:20 +00:00
parent d6aecc9d83
commit 522656ed2b
3 changed files with 39 additions and 43 deletions
wp-admin/includes
wp-includes

View File

@ -2910,31 +2910,29 @@ function dbDelta( $queries = '', $execute = true ) { // phpcs:ignore WordPress.N
*/ */
// Extract type, name and columns from the definition. // Extract type, name and columns from the definition.
// phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
preg_match( preg_match(
'/^' '/^
. '(?P<index_type>' // 1) Type of the index. (?P<index_type> # 1) Type of the index.
. 'PRIMARY\s+KEY|(?:UNIQUE|FULLTEXT|SPATIAL)\s+(?:KEY|INDEX)|KEY|INDEX' PRIMARY\s+KEY|(?:UNIQUE|FULLTEXT|SPATIAL)\s+(?:KEY|INDEX)|KEY|INDEX
. ')' )
. '\s+' // Followed by at least one white space character. \s+ # Followed by at least one white space character.
. '(?:' // Name of the index. Optional if type is PRIMARY KEY. (?: # Name of the index. Optional if type is PRIMARY KEY.
. '`?' // Name can be escaped with a backtick. `? # Name can be escaped with a backtick.
. '(?P<index_name>' // 2) Name of the index. (?P<index_name> # 2) Name of the index.
. '(?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+' (?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+
. ')' )
. '`?' // Name can be escaped with a backtick. `? # Name can be escaped with a backtick.
. '\s+' // Followed by at least one white space character. \s+ # Followed by at least one white space character.
. ')*' )*
. '\(' // Opening bracket for the columns. \( # Opening bracket for the columns.
. '(?P<index_columns>' (?P<index_columns>
. '.+?' // 3) Column names, index prefixes, and orders. .+? # 3) Column names, index prefixes, and orders.
. ')' )
. '\)' // Closing bracket for the columns. \) # Closing bracket for the columns.
. '$/im', $/imx',
$fld, $fld,
$index_matches $index_matches
); );
// phpcs:enable
// Uppercase the index type and normalize space characters. // Uppercase the index type and normalize space characters.
$index_type = strtoupper( preg_replace( '/\s+/', ' ', trim( $index_matches['index_type'] ) ) ); $index_type = strtoupper( preg_replace( '/\s+/', ' ', trim( $index_matches['index_type'] ) ) );
@ -2952,29 +2950,27 @@ function dbDelta( $queries = '', $execute = true ) { // phpcs:ignore WordPress.N
// Normalize columns. // Normalize columns.
foreach ( $index_columns as $id => &$index_column ) { foreach ( $index_columns as $id => &$index_column ) {
// Extract column name and number of indexed characters (sub_part). // Extract column name and number of indexed characters (sub_part).
// phpcs:disable Squiz.Strings.ConcatenationSpacing.PaddingFound -- don't remove regex indentation
preg_match( preg_match(
'/' '/
. '`?' // Name can be escaped with a backtick. `? # Name can be escaped with a backtick.
. '(?P<column_name>' // 1) Name of the column. (?P<column_name> # 1) Name of the column.
. '(?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+' (?:[0-9a-zA-Z$_-]|[\xC2-\xDF][\x80-\xBF])+
. ')' )
. '`?' // Name can be escaped with a backtick. `? # Name can be escaped with a backtick.
. '(?:' // Optional sub part. (?: # Optional sub part.
. '\s*' // Optional white space character between name and opening bracket. \s* # Optional white space character between name and opening bracket.
. '\(' // Opening bracket for the sub part. \( # Opening bracket for the sub part.
. '\s*' // Optional white space character after opening bracket. \s* # Optional white space character after opening bracket.
. '(?P<sub_part>' (?P<sub_part>
. '\d+' // 2) Number of indexed characters. \d+ # 2) Number of indexed characters.
. ')' )
. '\s*' // Optional white space character before closing bracket. \s* # Optional white space character before closing bracket.
. '\)' // Closing bracket for the sub part. \) # Closing bracket for the sub part.
. ')?' )?
. '/', /x',
$index_column, $index_column,
$index_column_matches $index_column_matches
); );
// phpcs:enable
// Escape the column name with backticks. // Escape the column name with backticks.
$index_column = '`' . $index_column_matches['column_name'] . '`'; $index_column = '`' . $index_column_matches['column_name'] . '`';

View File

@ -1565,8 +1565,8 @@ function wp_kses_hair_parse( $attr ) {
* Note: do NOT remove the `x` modifiers as they are essential for the above regex! * Note: do NOT remove the `x` modifiers as they are essential for the above regex!
*/ */
$validation = "%^($regex)+$%x"; $validation = "/^($regex)+$/x";
$extraction = "%$regex%x"; $extraction = "/$regex/x";
if ( 1 === preg_match( $validation, $attr ) ) { if ( 1 === preg_match( $validation, $attr ) ) {
preg_match_all( $extraction, $attr, $attrarr ); preg_match_all( $extraction, $attr, $attrarr );

View File

@ -16,7 +16,7 @@
* *
* @global string $wp_version * @global string $wp_version
*/ */
$wp_version = '6.5-alpha-57060'; $wp_version = '6.5-alpha-57061';
/** /**
* Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema. * Holds the WordPress DB revision, increments when changes are made to the WordPress DB schema.