diff --git a/packages/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php b/packages/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php index fe6845d71a3..bdfd9cbfd50 100644 --- a/packages/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php +++ b/packages/StaticTypeMapper/Mapper/ScalarStringToTypeMapper.php @@ -12,6 +12,7 @@ use PHPStan\Type\ClassStringType; use PHPStan\Type\Constant\ConstantBooleanType; use PHPStan\Type\FloatType; +use PHPStan\Type\IntegerRangeType; use PHPStan\Type\IntegerType; use PHPStan\Type\IterableType; use PHPStan\Type\MixedType; @@ -55,6 +56,14 @@ public function mapScalarStringToType(string $scalarName): Type return new ConstantBooleanType(true); } + if ($loweredScalarName === 'positive-int') { + return IntegerRangeType::createAllGreaterThan(0); + } + + if ($loweredScalarName === 'negative-int') { + return IntegerRangeType::createAllSmallerThan(0); + } + foreach (self::SCALAR_NAME_BY_TYPE as $objectType => $scalarNames) { if (! in_array($loweredScalarName, $scalarNames, true)) { continue; diff --git a/rules-tests/CodingStyle/Rector/ClassConst/VarConstantCommentRector/Fixture/skip_negative_int_over_int.php.inc b/rules-tests/CodingStyle/Rector/ClassConst/VarConstantCommentRector/Fixture/skip_negative_int_over_int.php.inc new file mode 100644 index 00000000000..741455bdda3 --- /dev/null +++ b/rules-tests/CodingStyle/Rector/ClassConst/VarConstantCommentRector/Fixture/skip_negative_int_over_int.php.inc @@ -0,0 +1,9 @@ +