Skip to content

PHPStan 2.3 breaks test suite #28

Open

Description

@Hug0-Drelon

Summary

composer test passes on PHPStan 2.2.x (62/62) but fails on 2.3.1 (10 failures). Not caused by recent extension commits — same code, different PHPStan version.

composer.lock is gitignored, so composer install can pull PHPStan 2.3.1 via phpstan-strict-rules 2.1.0 (^2.3).

Failures

1. pll_the_languages() — void → null (8 tests)

tests/data/pll_the_languages.php expects void; PHPStan 2.3 infers null for default calls.

2. Options foreach — lost narrowing (2 tests)

tests/data/options_edge_cases.php:19–20 — foreach ($options['domains'] as $lang => $domain) infers mixed for loop variables on 2.3. Direct access ($options['domains']) still works. Passes on 2.2.

Workaround: assign first ($domains = $options['domains']; foreach ($domains as …)).

Repro

composer require phpstan/phpstan:^2.3 phpstan/phpstan-strict-rules:^2.1 --dev -W && composer test  # 10 failures
composer require phpstan/phpstan:2.2.14 phpstan/phpstan-strict-rules:2.0.4 --dev -W && composer test  # 62/62

Tasks

  • Update pll_the_languages test fixtures (void → null) and README
  • Document foreach assign-first workaround in README
  • Pin PHPStan version or add CI matrix (2.2 + 2.3)
  • Consider committing composer.lock
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions