Skip to content

Commit cb9978d

Browse files
staabmondrejmirtes
authored andcommitted
Use early-returns in TypeCombinator
1 parent 057a348 commit cb9978d

File tree

1 file changed

+47
-47
lines changed

1 file changed

+47
-47
lines changed

src/Type/TypeCombinator.php

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -765,62 +765,62 @@ private static function optimizeConstantArrays(array $types): array
765765
{
766766
$constantArrayValuesCount = self::countConstantArrayValueTypes($types);
767767

768-
if ($constantArrayValuesCount > ConstantArrayTypeBuilder::ARRAY_COUNT_LIMIT) {
769-
$results = [];
770-
foreach ($types as $type) {
771-
$results[] = TypeTraverser::map($type, static function (Type $type, callable $traverse): Type {
772-
if ($type instanceof ConstantArrayType) {
773-
if ($type->isIterableAtLeastOnce()->no()) {
774-
return $type;
775-
}
768+
if ($constantArrayValuesCount <= ConstantArrayTypeBuilder::ARRAY_COUNT_LIMIT) {
769+
return $types;
770+
}
776771

777-
$isList = true;
778-
$valueTypes = [];
779-
$keyTypes = [];
780-
$nextAutoIndex = 0;
781-
foreach ($type->getKeyTypes() as $i => $innerKeyType) {
782-
if (!$innerKeyType instanceof ConstantIntegerType) {
783-
$isList = false;
784-
} elseif ($innerKeyType->getValue() !== $nextAutoIndex) {
785-
$isList = false;
786-
$nextAutoIndex = $innerKeyType->getValue() + 1;
787-
} else {
788-
$nextAutoIndex++;
789-
}
790-
791-
$generalizedKeyType = $innerKeyType->generalize(GeneralizePrecision::moreSpecific());
792-
$keyTypes[$generalizedKeyType->describe(VerbosityLevel::precise())] = $generalizedKeyType;
793-
794-
$innerValueType = $type->getValueTypes()[$i];
795-
$generalizedValueType = TypeTraverser::map($innerValueType, static function (Type $type, callable $innerTraverse) use ($traverse): Type {
796-
if ($type instanceof ArrayType) {
797-
return TypeCombinator::intersect($type, new OversizedArrayType());
798-
}
799-
800-
return $traverse($type);
801-
});
802-
$valueTypes[$generalizedValueType->describe(VerbosityLevel::precise())] = $generalizedValueType;
803-
}
772+
$results = [];
773+
foreach ($types as $type) {
774+
$results[] = TypeTraverser::map($type, static function (Type $type, callable $traverse): Type {
775+
if (!$type instanceof ConstantArrayType) {
776+
return $traverse($type);
777+
}
804778

805-
$keyType = TypeCombinator::union(...array_values($keyTypes));
806-
$valueType = TypeCombinator::union(...array_values($valueTypes));
779+
if ($type->isIterableAtLeastOnce()->no()) {
780+
return $type;
781+
}
807782

808-
$arrayType = new ArrayType($keyType, $valueType);
809-
if ($isList) {
810-
$arrayType = AccessoryArrayListType::intersectWith($arrayType);
783+
$isList = true;
784+
$valueTypes = [];
785+
$keyTypes = [];
786+
$nextAutoIndex = 0;
787+
foreach ($type->getKeyTypes() as $i => $innerKeyType) {
788+
if (!$innerKeyType instanceof ConstantIntegerType) {
789+
$isList = false;
790+
} elseif ($innerKeyType->getValue() !== $nextAutoIndex) {
791+
$isList = false;
792+
$nextAutoIndex = $innerKeyType->getValue() + 1;
793+
} else {
794+
$nextAutoIndex++;
795+
}
796+
797+
$generalizedKeyType = $innerKeyType->generalize(GeneralizePrecision::moreSpecific());
798+
$keyTypes[$generalizedKeyType->describe(VerbosityLevel::precise())] = $generalizedKeyType;
799+
800+
$innerValueType = $type->getValueTypes()[$i];
801+
$generalizedValueType = TypeTraverser::map($innerValueType, static function (Type $type, callable $innerTraverse) use ($traverse): Type {
802+
if ($type instanceof ArrayType) {
803+
return TypeCombinator::intersect($type, new OversizedArrayType());
811804
}
812805

813-
return TypeCombinator::intersect($arrayType, new NonEmptyArrayType(), new OversizedArrayType());
814-
}
806+
return $traverse($type);
807+
});
808+
$valueTypes[$generalizedValueType->describe(VerbosityLevel::precise())] = $generalizedValueType;
809+
}
815810

816-
return $traverse($type);
817-
});
818-
}
811+
$keyType = TypeCombinator::union(...array_values($keyTypes));
812+
$valueType = TypeCombinator::union(...array_values($valueTypes));
813+
814+
$arrayType = new ArrayType($keyType, $valueType);
815+
if ($isList) {
816+
$arrayType = AccessoryArrayListType::intersectWith($arrayType);
817+
}
819818

820-
return $results;
819+
return TypeCombinator::intersect($arrayType, new NonEmptyArrayType(), new OversizedArrayType());
820+
});
821821
}
822822

823-
return $types;
823+
return $results;
824824
}
825825

826826
/**

0 commit comments

Comments
 (0)