Skip to content

Unpacking associative arrays in PHP 8.1 produces Squiz.Arrays.ArrayDeclaration.NoKeySpecified respectively Squiz.Arrays.ArrayDeclaration.KeySpecified #3557

Closed
@stlrnz

Description

@stlrnz

Describe the bug
Since PHP 8.1 unpacking of associative arrays is supported.
Unpacking an associative array into another results in one of the errors Squiz.Arrays.ArrayDeclaration.NoKeySpecified or Squiz.Arrays.ArrayDeclaration.KeySpecified (depending on the position).

Code sample

<?php

$arr = [
        'a' => 1,
        'b' => 2,
       ];

$merged1 = [
            'c' => 3,
            ...$arr,
           ];

$merged2 = [
            ...$arr,
            'c' => 3,
           ];

Custom ruleset

<?xml version="1.0" encoding="UTF-8"?>
<ruleset>
    <rule ref="Squiz.Arrays.ArrayDeclaration"/>
</ruleset>

To reproduce

-------------------------------------------------------------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
-------------------------------------------------------------------------------------------------------------------------
 10 | ERROR | No key specified for array entry; first entry specifies key
    |       | (Squiz.Arrays.ArrayDeclaration.NoKeySpecified)
 15 | ERROR | Key specified for array entry; first entry has no key (Squiz.Arrays.ArrayDeclaration.KeySpecified)
-------------------------------------------------------------------------------------------------------------------------

Expected behavior
This should not result in an error:

  • ideally PHP_CodeSniffer can check if the unpacked array is associative
  • if thats not possible, array unpacking should be ignored by this rule

Versions:

  • OS: Windows 10
  • PHP: 8.1
  • PHPCS: 3.6.2
  • Standard: Squiz

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions