Fix #13000: Help phpstan understand what shape array has been created when looping over an array with known shape #25628
Triggered via pull request
February 16, 2026 16:07
Status
Failure
Total duration
16m 43s
Artifacts
–
tests.yml
on: pull_request
Matrix: Tests PHPUnit 12.x
Determine levels tests matrix
29s
Matrix: Integration tests
Matrix: Tests PHPUnit 11.x
Matrix: Tests with old PHPUnit
Matrix: Mutation Testing
Matrix: Levels tests
Annotations
2 errors and 20 warnings
|
Mutation Testing (8.4, ubuntu-latest)
Process completed with exit code 1.
|
|
Mutation Testing (8.3, ubuntu-latest)
Process completed with exit code 1.
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4434
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || $currentType->isSuperTypeOf($unrolledType)->no()
) {
continue;
}
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4434
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || !$unrolledType->isSuperTypeOf($currentType)->yes()
) {
continue;
}
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4433
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
- || !$currentType->isArray()->yes()
+ || $currentType->isArray()->no()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
continue;
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4432
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
- || !$currentType->isConstantArray()->no()
+ || $currentType->isConstantArray()->yes()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4431
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
$currentType = $currentHolder->getType();
if (
- !$unrolledType->isConstantArray()->yes()
+ $unrolledType->isConstantArray()->no()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4408
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || $currentType->isSuperTypeOf($unrolledType)->no()
) {
continue;
}
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4408
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || !$unrolledType->isSuperTypeOf($currentType)->yes()
) {
continue;
}
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4407
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
- || !$currentType->isArray()->yes()
+ || $currentType->isArray()->no()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
continue;
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4406
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
// Only refine if the unrolled scope has a more precise type
if (
!$unrolledType->isConstantArray()->yes()
- || !$currentType->isConstantArray()->no()
+ || $currentType->isConstantArray()->yes()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
|
|
Mutation Testing (8.4, ubuntu-latest):
src/Analyser/MutatingScope.php#L4405
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
// Only refine if the unrolled scope has a more precise type
if (
- !$unrolledType->isConstantArray()->yes()
+ $unrolledType->isConstantArray()->no()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4434
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || $currentType->isSuperTypeOf($unrolledType)->no()
) {
continue;
}
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4434
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || !$unrolledType->isSuperTypeOf($currentType)->yes()
) {
continue;
}
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4433
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
- || !$currentType->isArray()->yes()
+ || $currentType->isArray()->no()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
continue;
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4432
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
- || !$currentType->isConstantArray()->no()
+ || $currentType->isConstantArray()->yes()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4431
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
$currentType = $currentHolder->getType();
if (
- !$unrolledType->isConstantArray()->yes()
+ $unrolledType->isConstantArray()->no()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4408
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || $currentType->isSuperTypeOf($unrolledType)->no()
) {
continue;
}
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4408
Escaped Mutant for Mutator "PHPStan\Infection\IsSuperTypeOfCalleeAndArgumentMutator":
@@ @@
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
- || !$currentType->isSuperTypeOf($unrolledType)->yes()
+ || !$unrolledType->isSuperTypeOf($currentType)->yes()
) {
continue;
}
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4407
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
if (
!$unrolledType->isConstantArray()->yes()
|| !$currentType->isConstantArray()->no()
- || !$currentType->isArray()->yes()
+ || $currentType->isArray()->no()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
continue;
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4406
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
// Only refine if the unrolled scope has a more precise type
if (
!$unrolledType->isConstantArray()->yes()
- || !$currentType->isConstantArray()->no()
+ || $currentType->isConstantArray()->yes()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
) {
|
|
Mutation Testing (8.3, ubuntu-latest):
src/Analyser/MutatingScope.php#L4405
Escaped Mutant for Mutator "PHPStan\Infection\TrinaryLogicMutator":
@@ @@
// Only refine if the unrolled scope has a more precise type
if (
- !$unrolledType->isConstantArray()->yes()
+ $unrolledType->isConstantArray()->no()
|| !$currentType->isConstantArray()->no()
|| !$currentType->isArray()->yes()
|| !$currentType->isSuperTypeOf($unrolledType)->yes()
|