From 63509d07e8f3478a8781734433f4db61db01baeb Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Fri, 10 Apr 2026 18:08:42 +0200 Subject: [PATCH 1/2] Upgrade shipmonk/dead-code-detector to ^1.0 Fix phpstan error in AllowComparingOnlyComparableTypesRule (use foreach instead of for loop) Co-Authored-By: Claude Code --- composer.json | 2 +- composer.lock | 62 ++++++++++++------- .../AllowComparingOnlyComparableTypesRule.php | 8 ++- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/composer.json b/composer.json index 366c12d..4af645e 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "shipmonk/coding-standard": "^0.2.0", "shipmonk/composer-dependency-analyser": "^1.8.1", "shipmonk/coverage-guard": "^1.0.0", - "shipmonk/dead-code-detector": "^0.9.0", + "shipmonk/dead-code-detector": "^1.0", "shipmonk/name-collision-detector": "^2.1.1", "shipmonk/phpstan-dev": "^0.1.5" }, diff --git a/composer.lock b/composer.lock index 5f2a4fa..ff871e0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4c7123103b054a841dad1b79b64f2cbc", + "content-hash": "2f74332d5e7fa79091dcb89ac9d6331f", "packages": [ { "name": "phpstan/phpstan", @@ -3035,42 +3035,60 @@ }, { "name": "shipmonk/dead-code-detector", - "version": "0.9.2", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/shipmonk-rnd/dead-code-detector.git", - "reference": "a4fef66901d2e282ccf4ff1e60ea2c922046059a" + "reference": "fe2b701dd51ae4659e409417831c0b7122457b90" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/shipmonk-rnd/dead-code-detector/zipball/a4fef66901d2e282ccf4ff1e60ea2c922046059a", - "reference": "a4fef66901d2e282ccf4ff1e60ea2c922046059a", + "url": "https://api.github.com/repos/shipmonk-rnd/dead-code-detector/zipball/fe2b701dd51ae4659e409417831c0b7122457b90", + "reference": "fe2b701dd51ae4659e409417831c0b7122457b90", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0", - "phpstan/phpstan": "^2.0" + "php": "^8.1", + "phpstan/phpstan": "^2.1.41" }, "require-dev": { + "behat/behat": "^3.14", + "composer-runtime-api": "^2.0", + "composer/semver": "^3.4", "doctrine/orm": "^2.19 || ^3.0", - "editorconfig-checker/editorconfig-checker": "^10.6.0", - "ergebnis/composer-normalize": "^2.45.0", + "editorconfig-checker/editorconfig-checker": "^10.7.0", + "ergebnis/composer-normalize": "^2.48.1", + "laravel/framework": "^10.0 || ^11.0 || ^12.0", "nette/application": "^3.1", "nette/component-model": "^3.0", + "nette/tester": "^2.4", "nette/utils": "^3.0 || ^4.0", "nikic/php-parser": "^5.4.0", - "phpstan/phpstan-phpunit": "^2.0.4", - "phpstan/phpstan-strict-rules": "^2.0.3", - "phpstan/phpstan-symfony": "^2.0.2", - "phpunit/phpunit": "^9.6.22", - "shipmonk/composer-dependency-analyser": "^1.8.2", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan-phpunit": "^2.0.16", + "phpstan/phpstan-strict-rules": "^2.0.10", + "phpstan/phpstan-symfony": "^2.0.15", + "phpunit/phpcov": "^9.0.2", + "phpunit/phpunit": "^10.5.46", + "shipmonk/coding-standard": "^0.2.2", + "shipmonk/composer-dependency-analyser": "^1.8.4", + "shipmonk/coverage-guard": "^1.0.2", "shipmonk/name-collision-detector": "^2.1.1", - "shipmonk/phpstan-rules": "^4.1.0", - "slevomat/coding-standard": "^8.16.0", - "symfony/contracts": "^2.5 || ^3.0", - "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", - "symfony/routing": "^5.4 || ^6.0 || ^7.0" + "shipmonk/phpstan-dev": "^0.1.6", + "shipmonk/phpstan-rules": "^4.3.6", + "symfony/contracts": "^2.5 || ^3.0 || ^4.0", + "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/doctrine-bridge": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/event-dispatcher": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/form": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/routing": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "symfony/scheduler": "^6.3 || ^7.0 || ^8.0", + "symfony/ux-live-component": "^2.34", + "symfony/ux-twig-component": "^2.34", + "symfony/validator": "^5.4 || ^6.0 || ^7.0 || ^8.0", + "twig/twig": "^3.0" }, "type": "phpstan-extension", "extra": { @@ -3098,9 +3116,9 @@ ], "support": { "issues": "https://github.com/shipmonk-rnd/dead-code-detector/issues", - "source": "https://github.com/shipmonk-rnd/dead-code-detector/tree/0.9.2" + "source": "https://github.com/shipmonk-rnd/dead-code-detector/tree/1.1.2" }, - "time": "2025-03-07T09:23:22+00:00" + "time": "2026-05-11T09:27:21+00:00" }, { "name": "shipmonk/name-collision-detector", diff --git a/src/Rule/AllowComparingOnlyComparableTypesRule.php b/src/Rule/AllowComparingOnlyComparableTypesRule.php index 74a8bb4..3345712 100644 --- a/src/Rule/AllowComparingOnlyComparableTypesRule.php +++ b/src/Rule/AllowComparingOnlyComparableTypesRule.php @@ -149,8 +149,12 @@ private function isComparableTogether( return false; } - for ($i = 0; $i < count($leftValueTypes); $i++) { - if (!$this->isComparableTogether($leftValueTypes[$i], $rightValueTypes[$i])) { // @phpstan-ignore offsetAccess.notFound, offsetAccess.notFound + foreach ($leftValueTypes as $i => $leftValueType) { + if (!isset($rightValueTypes[$i])) { + return false; + } + + if (!$this->isComparableTogether($leftValueType, $rightValueTypes[$i])) { return false; } } From 483e77032bf3c2e1d17f0e450d6b167502a6761c Mon Sep 17 00:00:00 2001 From: Jan Nedbal Date: Mon, 18 May 2026 13:42:26 +0200 Subject: [PATCH 2/2] Revert unrelated src change in AllowComparingOnlyComparableTypesRule --- src/Rule/AllowComparingOnlyComparableTypesRule.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/Rule/AllowComparingOnlyComparableTypesRule.php b/src/Rule/AllowComparingOnlyComparableTypesRule.php index 3345712..74a8bb4 100644 --- a/src/Rule/AllowComparingOnlyComparableTypesRule.php +++ b/src/Rule/AllowComparingOnlyComparableTypesRule.php @@ -149,12 +149,8 @@ private function isComparableTogether( return false; } - foreach ($leftValueTypes as $i => $leftValueType) { - if (!isset($rightValueTypes[$i])) { - return false; - } - - if (!$this->isComparableTogether($leftValueType, $rightValueTypes[$i])) { + for ($i = 0; $i < count($leftValueTypes); $i++) { + if (!$this->isComparableTogether($leftValueTypes[$i], $rightValueTypes[$i])) { // @phpstan-ignore offsetAccess.notFound, offsetAccess.notFound return false; } }