Skip to content

Commit

Permalink
Resolve parameter types only when checkArgumentTypes=true
Browse files Browse the repository at this point in the history
  • Loading branch information
staabm authored and ondrejmirtes committed Dec 13, 2022
1 parent 1b92af0 commit e74be98
Showing 1 changed file with 35 additions and 36 deletions.
71 changes: 35 additions & 36 deletions src/Rules/FunctionCallParametersCheck.php
Expand Up @@ -249,43 +249,42 @@ public function check(
continue;
}

$parameterType = TypeUtils::resolveLateResolvableTypes($parameter->getType());
if (
$this->checkArgumentTypes
&& !$parameter->passedByReference()->createsNewVariable()
&& !$this->ruleLevelHelper->accepts($parameterType, $argumentValueType, $scope->isDeclareStrictTypes())
) {
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($parameterType, $argumentValueType);
$parameterDescription = sprintf('%s$%s', $parameter->isVariadic() ? '...' : '', $parameter->getName());
$errors[] = RuleErrorBuilder::message(sprintf(
$messages[6],
$argumentName === null ? sprintf(
'#%d %s',
$i + 1,
$parameterDescription,
) : $parameterDescription,
$parameterType->describe($verbosityLevel),
$argumentValueType->describe($verbosityLevel),
))->line($argumentLine)->build();
}
if ($this->checkArgumentTypes) {
$parameterType = TypeUtils::resolveLateResolvableTypes($parameter->getType());

if (
$this->checkArgumentTypes
&& $this->checkUnresolvableParameterTypes
&& $originalParameter !== null
&& !$this->unresolvableTypeHelper->containsUnresolvableType($originalParameter->getType())
&& $this->unresolvableTypeHelper->containsUnresolvableType($parameterType)
&& isset($messages[13])
) {
$parameterDescription = sprintf('%s$%s', $parameter->isVariadic() ? '...' : '', $parameter->getName());
$errors[] = RuleErrorBuilder::message(sprintf(
$messages[13],
$argumentName === null ? sprintf(
'#%d %s',
$i + 1,
$parameterDescription,
) : $parameterDescription,
))->line($argumentLine)->build();
if (!$parameter->passedByReference()->createsNewVariable()
&& !$this->ruleLevelHelper->accepts($parameterType, $argumentValueType, $scope->isDeclareStrictTypes())
) {
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($parameterType, $argumentValueType);
$parameterDescription = sprintf('%s$%s', $parameter->isVariadic() ? '...' : '', $parameter->getName());
$errors[] = RuleErrorBuilder::message(sprintf(
$messages[6],
$argumentName === null ? sprintf(
'#%d %s',
$i + 1,
$parameterDescription,
) : $parameterDescription,
$parameterType->describe($verbosityLevel),
$argumentValueType->describe($verbosityLevel),
))->line($argumentLine)->build();
}

if ($this->checkUnresolvableParameterTypes
&& $originalParameter !== null
&& isset($messages[13])
&& !$this->unresolvableTypeHelper->containsUnresolvableType($originalParameter->getType())
&& $this->unresolvableTypeHelper->containsUnresolvableType($parameterType)
) {
$parameterDescription = sprintf('%s$%s', $parameter->isVariadic() ? '...' : '', $parameter->getName());
$errors[] = RuleErrorBuilder::message(sprintf(
$messages[13],
$argumentName === null ? sprintf(
'#%d %s',
$i + 1,
$parameterDescription,
) : $parameterDescription,
))->line($argumentLine)->build();
}
}

if (
Expand Down

0 comments on commit e74be98

Please sign in to comment.