Skip to content

Commit 8c58c09

Browse files
staabmondrejmirtes
authored andcommitted
Prevent overly greedy $scope->getType() calls in Yield*Rules
1 parent 9e423bc commit 8c58c09

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/Rules/Generators/YieldFromTypeRule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public function processNode(Node $node, Scope $scope): array
126126
))->build();
127127
}
128128

129-
if ($scope->getType($node)->isVoid()->yes() && !$scope->isInFirstLevelStatement()) {
129+
if (!$scope->isInFirstLevelStatement() && $scope->getType($node)->isVoid()->yes()) {
130130
$messages[] = RuleErrorBuilder::message('Result of yield from (void) is used.')->build();
131131
}
132132

src/Rules/Generators/YieldTypeRule.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,6 @@ public function processNode(Node $node, Scope $scope): array
5353
$keyType = $scope->getType($node->key);
5454
}
5555

56-
if ($node->value === null) {
57-
$valueType = new NullType();
58-
} else {
59-
$valueType = $scope->getType($node->value);
60-
}
61-
6256
$messages = [];
6357
if (!$this->ruleLevelHelper->accepts($returnType->getIterableKeyType(), $keyType, $scope->isDeclareStrictTypes())) {
6458
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($returnType->getIterableKeyType(), $keyType);
@@ -68,6 +62,13 @@ public function processNode(Node $node, Scope $scope): array
6862
$keyType->describe($verbosityLevel),
6963
))->build();
7064
}
65+
66+
if ($node->value === null) {
67+
$valueType = new NullType();
68+
} else {
69+
$valueType = $scope->getType($node->value);
70+
}
71+
7172
if (!$this->ruleLevelHelper->accepts($returnType->getIterableValueType(), $valueType, $scope->isDeclareStrictTypes())) {
7273
$verbosityLevel = VerbosityLevel::getRecommendedLevelByType($returnType->getIterableValueType(), $valueType);
7374
$messages[] = RuleErrorBuilder::message(sprintf(
@@ -76,7 +77,7 @@ public function processNode(Node $node, Scope $scope): array
7677
$valueType->describe($verbosityLevel),
7778
))->build();
7879
}
79-
if ($scope->getType($node)->isVoid()->yes() && !$scope->isInFirstLevelStatement()) {
80+
if (!$scope->isInFirstLevelStatement() && $scope->getType($node)->isVoid()->yes()) {
8081
$messages[] = RuleErrorBuilder::message('Result of yield (void) is used.')->build();
8182
}
8283

0 commit comments

Comments
 (0)