diff --git a/src/Rules/Generators/YieldFromTypeRule.php b/src/Rules/Generators/YieldFromTypeRule.php index 60ab02e189..5f3e66d75f 100644 --- a/src/Rules/Generators/YieldFromTypeRule.php +++ b/src/Rules/Generators/YieldFromTypeRule.php @@ -126,7 +126,7 @@ public function processNode(Node $node, Scope $scope): array ))->build(); } - if ($scope->getType($node)->isVoid()->yes() && !$scope->isInFirstLevelStatement()) { + if (!$scope->isInFirstLevelStatement() && $scope->getType($node)->isVoid()->yes()) { $messages[] = RuleErrorBuilder::message('Result of yield from (void) is used.')->build(); } diff --git a/src/Rules/Generators/YieldTypeRule.php b/src/Rules/Generators/YieldTypeRule.php index c71b242191..c0d27bf318 100644 --- a/src/Rules/Generators/YieldTypeRule.php +++ b/src/Rules/Generators/YieldTypeRule.php @@ -53,12 +53,6 @@ public function processNode(Node $node, Scope $scope): array $keyType = $scope->getType($node->key); } - if ($node->value === null) { - $valueType = new NullType(); - } else { - $valueType = $scope->getType($node->value); - } - $messages = []; if (!$this->ruleLevelHelper->accepts($returnType->getIterableKeyType(), $keyType, $scope->isDeclareStrictTypes())) { $verbosityLevel = VerbosityLevel::getRecommendedLevelByType($returnType->getIterableKeyType(), $keyType); @@ -68,6 +62,13 @@ public function processNode(Node $node, Scope $scope): array $keyType->describe($verbosityLevel), ))->build(); } + + if ($node->value === null) { + $valueType = new NullType(); + } else { + $valueType = $scope->getType($node->value); + } + if (!$this->ruleLevelHelper->accepts($returnType->getIterableValueType(), $valueType, $scope->isDeclareStrictTypes())) { $verbosityLevel = VerbosityLevel::getRecommendedLevelByType($returnType->getIterableValueType(), $valueType); $messages[] = RuleErrorBuilder::message(sprintf( @@ -76,7 +77,7 @@ public function processNode(Node $node, Scope $scope): array $valueType->describe($verbosityLevel), ))->build(); } - if ($scope->getType($node)->isVoid()->yes() && !$scope->isInFirstLevelStatement()) { + if (!$scope->isInFirstLevelStatement() && $scope->getType($node)->isVoid()->yes()) { $messages[] = RuleErrorBuilder::message('Result of yield (void) is used.')->build(); }