diff --git a/conf/config.level5.neon b/conf/config.level5.neon index 061761de574..16249f01fe2 100644 --- a/conf/config.level5.neon +++ b/conf/config.level5.neon @@ -14,3 +14,5 @@ parameters: services: - class: PHPStan\Rules\Functions\RandomIntParametersRule + arguments: + reportMaybes: %reportMaybes% diff --git a/src/Rules/Functions/RandomIntParametersRule.php b/src/Rules/Functions/RandomIntParametersRule.php index 1db860e10bb..0b944275b42 100644 --- a/src/Rules/Functions/RandomIntParametersRule.php +++ b/src/Rules/Functions/RandomIntParametersRule.php @@ -21,9 +21,13 @@ class RandomIntParametersRule implements \PHPStan\Rules\Rule /** @var ReflectionProvider */ private $reflectionProvider; - public function __construct(ReflectionProvider $reflectionProvider) + /** @var bool */ + private $reportMaybes; + + public function __construct(ReflectionProvider $reflectionProvider, bool $reportMaybes) { $this->reflectionProvider = $reflectionProvider; + $this->reportMaybes = $reportMaybes; } public function getNodeType(): string @@ -59,13 +63,18 @@ public function processNode(Node $node, Scope $scope): array if (!$maxPermittedType->isSuperTypeOf($maxType)->yes()) { $message = 'Parameter #1 $min (%s) of function random_int expects lower number than parameter #2 $max (%s).'; - return [ - RuleErrorBuilder::message(sprintf( - $message, - $minType->describe(VerbosityLevel::value()), - $maxType->describe(VerbosityLevel::value()) - ))->build(), - ]; + // True if sometimes the parameters conflict. + $isMaybe = !$maxType->isSuperTypeOf($minType)->no(); + + if (!$isMaybe || $this->reportMaybes) { + return [ + RuleErrorBuilder::message(sprintf( + $message, + $minType->describe(VerbosityLevel::value()), + $maxType->describe(VerbosityLevel::value()) + ))->build(), + ]; + } } }