Skip to content

False positive Universal.Arrays.DuplicateArrayKey.Found when array keys look numeric #619

Description

@aymanrady

Bug Description

Universal.Arrays.DuplicateArrayKey.Found is incorrectly reported in an array with number-like keys.

Given the following reproduction Scenario

The issue happens when running this command:

phpcs -ps file.php --standard=Universal

... over a file containing this code:

<?php

array(
'_1' => 'value1',
'_2' => 'value2',
);

I'd expect the following behaviour

No errors.

Instead this happened

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
 5 | ERROR | Duplicate array key found. The value will be overwritten. The integer array key "0" was first seen on line 4 (Universal.Arrays.DuplicateArrayKey.Found)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------

Environment

Environment Answer
PHP version 8.2.22
PHP_CodeSniffer version 3.10.2
PHPCSExtra version 1.2.1
PHPCSUtils version 1.0.12
Install type composer project local

Additional Context (optional)

Ran unit tests with this patch

diff --git a/Universal/Tests/Arrays/DuplicateArrayKeyUnitTest.inc b/Universal/Tests/Arrays/DuplicateArrayKeyUnitTest.inc
index 2101f89..14d7ebf 100644
--- a/Universal/Tests/Arrays/DuplicateArrayKeyUnitTest.inc
+++ b/Universal/Tests/Arrays/DuplicateArrayKeyUnitTest.inc
@@ -165,3 +165,8 @@ $testPHPLt8VsPHP8 = array(
     1   => 'j', // Duplicate in PHP < 8, not in PHP 8.
     2   => 'k', // Duplicate in PHP < 8, not in PHP 8.
 );
+
+$testNumberLikeKey = array(
+    '_1' => 1,
+    '_2' => 2,
+);
There was 1 failure:

1) PHPCSExtra\Universal\Tests\Arrays\DuplicateArrayKeyUnitTest::testSniff
[LINE 171] Expected 0 error(s) in DuplicateArrayKeyUnitTest.inc but found 1 error(s). The error(s) found were:
 -> Duplicate array key found. The value will be overwritten. The integer array key "0" was first seen on line 170 (Universal.Arrays.DuplicateArrayKey.Found)

/home/aymanrady/Development/open-source/PHPCSExtra/vendor/squizlabs/php_codesniffer/tests/Standards/AbstractSniffUnitTest.php:214
/home/aymanrady/Development/open-source/PHPCSExtra/vendor/squizlabs/php_codesniffer/tests/TestSuite7.php:28

Tested Against develop branch?

  • I have verified the issue still exists in the develop branch of PHPCSExtra.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions