From 03a96eebf88e21db4eeef7131095509592445f70 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Fri, 6 Feb 2026 11:35:29 -0300 Subject: [PATCH 1/2] Arrays/ArrayDeclarationSpacing: move parse error test to its own file --- .../Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc | 4 ---- .../Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed | 4 ---- .../Tests/Arrays/ArrayDeclarationSpacingUnitTest.3.inc | 8 ++++++++ 3 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.3.inc diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc index fd47c0a3a9..a40f8fcd78 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc @@ -81,7 +81,3 @@ $bad = array( // Don't confuse list arrows with array arrows. $okay = array( $item1, list( 'key1' => $a, 'key2' => $b ) = $array, $item3 ); - -// Live coding/parse error. -// This must be the last test in the file! -$ignore = array( $item1, 'key' => 'value', diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed index c0bddcc551..072fee9908 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed @@ -134,7 +134,3 @@ $bad = array( // Don't confuse list arrows with array arrows. $okay = array( $item1, list( 'key1' => $a, 'key2' => $b ) = $array, $item3 ); - -// Live coding/parse error. -// This must be the last test in the file! -$ignore = array( $item1, 'key' => 'value', diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.3.inc b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.3.inc new file mode 100644 index 0000000000..184b1da687 --- /dev/null +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.3.inc @@ -0,0 +1,8 @@ + 'value', From 2229662b6a1a1351775bafb9607862bfc6190965 Mon Sep 17 00:00:00 2001 From: Rodrigo Primo Date: Fri, 6 Feb 2026 11:42:02 -0300 Subject: [PATCH 2/2] Arrays/ArrayDeclarationSpacing: add new property and soft-deprecate old one Add `allow_single_item_single_line_explicit_key_arrays` property to replace `allow_single_item_single_line_associative_arrays`, aligning the property name with the "explicit keys" terminology from PR 2688. The old property is soft-deprecated (docblock only) and continues to work via a backward compatibility layer: if the new property has not been changed from its default and the old property has with a valid value, the old property's value is used. Closes: 2691 Co-authored-by: Juliette <663378+jrfnl@users.noreply.github.com> --- .../Arrays/ArrayDeclarationSpacingSniff.php | 27 +++++++++++-- .../ArrayDeclarationSpacingUnitTest.1.inc | 13 ++++++ ...rrayDeclarationSpacingUnitTest.1.inc.fixed | 18 +++++++++ .../ArrayDeclarationSpacingUnitTest.2.inc | 7 ++++ ...rrayDeclarationSpacingUnitTest.2.inc.fixed | 12 ++++++ .../ArrayDeclarationSpacingUnitTest.php | 40 ++++++++++--------- 6 files changed, 96 insertions(+), 21 deletions(-) diff --git a/WordPress/Sniffs/Arrays/ArrayDeclarationSpacingSniff.php b/WordPress/Sniffs/Arrays/ArrayDeclarationSpacingSniff.php index ae44ca523b..2e8b794e05 100644 --- a/WordPress/Sniffs/Arrays/ArrayDeclarationSpacingSniff.php +++ b/WordPress/Sniffs/Arrays/ArrayDeclarationSpacingSniff.php @@ -38,13 +38,25 @@ * `allow_single_item_single_line_associative_arrays` property. * @since 3.0.0 Removed various whitespace related checks and fixers in favor of the PHPCSExtra * `NormalizedArrays.Arrays.ArrayBraceSpacing` sniff. + * @since 3.4.0 The `allow_single_item_single_line_associative_arrays` property has been + * deprecated in favor of the new `allow_single_item_single_line_explicit_key_arrays` property. */ final class ArrayDeclarationSpacingSniff extends Sniff { + /** + * Whether to allow single item arrays with explicit keys to be single line. + * + * @since 3.4.0 + * + * @var bool Defaults to true. + */ + public $allow_single_item_single_line_explicit_key_arrays = true; + /** * Whether or not to allow single item arrays with explicit keys to be single line. * * @since 0.14.0 + * @deprecated 3.4.0 Use $allow_single_item_single_line_explicit_key_arrays instead. * * @var bool Defaults to true. */ @@ -114,10 +126,19 @@ public function process_token( $stackPtr ) { * @return void */ protected function process_single_line_array( $stackPtr, $opener, $closer ) { + // For now, if the new property has not been changed from its default value and the deprecated property has, use + // the deprecated property's value. + $allow_single_item = $this->allow_single_item_single_line_explicit_key_arrays; + if ( true === $allow_single_item + && false === $this->allow_single_item_single_line_associative_arrays + ) { + $allow_single_item = false; + } + $array_items = PassedParameters::getParameters( $this->phpcsFile, $stackPtr ); - if ( ( false === $this->allow_single_item_single_line_associative_arrays + if ( ( false === $allow_single_item && empty( $array_items ) ) - || ( true === $this->allow_single_item_single_line_associative_arrays + || ( true === $allow_single_item && \count( $array_items ) === 1 ) ) { return; @@ -138,7 +159,7 @@ protected function process_single_line_array( $stackPtr, $opener, $closer ) { return; } $error = 'When an array is declared with explicit keys, each value should start on %s.'; - if ( true === $this->allow_single_item_single_line_associative_arrays ) { + if ( true === $allow_single_item ) { $error = 'When a multi-item array is declared with explicit keys, each value should start on %s.'; } diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc index a40f8fcd78..5bd00f8acf 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc @@ -81,3 +81,16 @@ $bad = array( // Don't confuse list arrows with array arrows. $okay = array( $item1, list( 'key1' => $a, 'key2' => $b ) = $array, $item3 ); + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays false + +$bad = array( 'key' => 'value' ); // Bad. +$bad = array( 'key1' => 'value1', 'key2' => 'value2' ); // Bad. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays true + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_associative_arrays null + +$ok = array( 'key' => 'value' ); // OK, invalid value for deprecated property should be ignored. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_associative_arrays true diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed index 072fee9908..267427ae3b 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.1.inc.fixed @@ -134,3 +134,21 @@ $bad = array( // Don't confuse list arrows with array arrows. $okay = array( $item1, list( 'key1' => $a, 'key2' => $b ) = $array, $item3 ); + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays false + +$bad = array( +'key' => 'value' +); // Bad. +$bad = array( +'key1' => 'value1', +'key2' => 'value2' +); // Bad. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays true + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_associative_arrays null + +$ok = array( 'key' => 'value' ); // OK, invalid value for deprecated property should be ignored. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_associative_arrays true diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc index 34ea62060f..da24a06279 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc @@ -107,3 +107,10 @@ $bad = [ // Don't confuse list arrows with array arrows. $okay = [ $item1, [ 'key1' => $a, 'key2' => $b ] = $array, $item3 ]; + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays false + +$bad = [ 'key' => 'value' ]; // Bad. +$bad = [ 'key1' => 'value1', 'key2' => 'value2' ]; // Bad. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays true diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc.fixed b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc.fixed index c4b03f73cc..3480020aa9 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc.fixed +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.2.inc.fixed @@ -163,3 +163,15 @@ $bad = [ // Don't confuse list arrows with array arrows. $okay = [ $item1, [ 'key1' => $a, 'key2' => $b ] = $array, $item3 ]; + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays false + +$bad = [ +'key' => 'value' +]; // Bad. +$bad = [ +'key1' => 'value1', +'key2' => 'value2' +]; // Bad. + +// phpcs:set WordPress.Arrays.ArrayDeclarationSpacing allow_single_item_single_line_explicit_key_arrays true diff --git a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.php b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.php index 9a289959e6..6a46292970 100644 --- a/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.php +++ b/WordPress/Tests/Arrays/ArrayDeclarationSpacingUnitTest.php @@ -51,29 +51,33 @@ public function getErrorList( $testFile = '' ) { 62 => 1, 63 => 1, 75 => 1, + 87 => 1, + 88 => 1, ); // Short arrays. case 'ArrayDeclarationSpacingUnitTest.2.inc': return array( - 9 => 4, - 13 => 2, - 15 => 1, - 19 => 1, - 22 => 1, - 25 => 1, - 44 => 1, - 45 => 1, - 48 => 1, - 49 => 1, - 52 => 2, - 54 => 1, - 57 => 1, - 58 => 1, - 62 => 1, - 63 => 1, - 75 => 1, - 97 => 1, + 9 => 4, + 13 => 2, + 15 => 1, + 19 => 1, + 22 => 1, + 25 => 1, + 44 => 1, + 45 => 1, + 48 => 1, + 49 => 1, + 52 => 2, + 54 => 1, + 57 => 1, + 58 => 1, + 62 => 1, + 63 => 1, + 75 => 1, + 97 => 1, + 113 => 1, + 114 => 1, ); default: