diff --git a/src/Rules/Comparison/ConstantLooseComparisonRule.php b/src/Rules/Comparison/ConstantLooseComparisonRule.php index 78766f823f..5a15471265 100644 --- a/src/Rules/Comparison/ConstantLooseComparisonRule.php +++ b/src/Rules/Comparison/ConstantLooseComparisonRule.php @@ -36,16 +36,13 @@ public function processNode(Node $node, Scope $scope): array return []; } - $leftType = $scope->getType($node->left); - $rightType = $scope->getType($node->right); - if (!$nodeType->getValue()) { return [ RuleErrorBuilder::message(sprintf( 'Loose comparison using %s between %s and %s will always evaluate to false.', $node instanceof Node\Expr\BinaryOp\Equal ? '==' : '!=', - $leftType->describe(VerbosityLevel::value()), - $rightType->describe(VerbosityLevel::value()), + $scope->getType($node->left)->describe(VerbosityLevel::value()), + $scope->getType($node->right)->describe(VerbosityLevel::value()), ))->build(), ]; } elseif ($this->checkAlwaysTrueLooseComparison) { @@ -53,8 +50,8 @@ public function processNode(Node $node, Scope $scope): array RuleErrorBuilder::message(sprintf( 'Loose comparison using %s between %s and %s will always evaluate to true.', $node instanceof Node\Expr\BinaryOp\Equal ? '==' : '!=', - $leftType->describe(VerbosityLevel::value()), - $rightType->describe(VerbosityLevel::value()), + $scope->getType($node->left)->describe(VerbosityLevel::value()), + $scope->getType($node->right)->describe(VerbosityLevel::value()), ))->build(), ]; } diff --git a/src/Rules/Comparison/ImpossibleCheckTypeHelper.php b/src/Rules/Comparison/ImpossibleCheckTypeHelper.php index 6606d0554f..a79ab5abef 100644 --- a/src/Rules/Comparison/ImpossibleCheckTypeHelper.php +++ b/src/Rules/Comparison/ImpossibleCheckTypeHelper.php @@ -154,7 +154,6 @@ public function findSpecifiedType( } } elseif ($functionName === 'method_exists' && $argsCount >= 2) { $objectType = $scope->getType($node->getArgs()[0]->value); - $methodType = $scope->getType($node->getArgs()[1]->value); if ($objectType instanceof ConstantStringType && !$this->reflectionProvider->hasClass($objectType->getValue()) @@ -162,6 +161,7 @@ public function findSpecifiedType( return false; } + $methodType = $scope->getType($node->getArgs()[1]->value); if ($methodType instanceof ConstantStringType) { if ($objectType instanceof ConstantStringType) { $objectType = new ObjectType($objectType->getValue()); diff --git a/src/Rules/Comparison/UsageOfVoidMatchExpressionRule.php b/src/Rules/Comparison/UsageOfVoidMatchExpressionRule.php index bd7f18c99f..53f9f5a774 100644 --- a/src/Rules/Comparison/UsageOfVoidMatchExpressionRule.php +++ b/src/Rules/Comparison/UsageOfVoidMatchExpressionRule.php @@ -20,12 +20,11 @@ public function getNodeType(): string public function processNode(Node $node, Scope $scope): array { - $matchResultType = $scope->getType($node); - if ( - $matchResultType->isVoid()->yes() - && !$scope->isInFirstLevelStatement() - ) { - return [RuleErrorBuilder::message('Result of match expression (void) is used.')->build()]; + if (!$scope->isInFirstLevelStatement()) { + $matchResultType = $scope->getType($node); + if ($matchResultType->isVoid()->yes()) { + return [RuleErrorBuilder::message('Result of match expression (void) is used.')->build()]; + } } return [];