Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 13841eb

Browse files
committed
infinite loop in never returning function is allowed
1 parent d1f76fc commit 13841eb

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

‎src/Rules/Comparison/WhileLoopAlwaysTrueConditionRule.php‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PHPStan\Rules\Rule;
1414
use PHPStan\Rules\RuleErrorBuilder;
1515
use PHPStan\Type\Constant\ConstantBooleanType;
16+
use PHPStan\Type\NeverType;
1617

1718
/**
1819
* @implements Rule<BreaklessWhileLoopNode>
@@ -67,6 +68,12 @@ public function processNode(
6768
$originalNode = $node->getOriginalNode();
6869
$exprType = $this->helper->getBooleanType($scope, $originalNode->cond);
6970
if ($exprType->isTrue()->yes()) {
71+
$ref = $scope->getFunction() ?? $scope->getAnonymousFunctionReflection();
72+
73+
if ($ref !== null && $ref->getReturnType() instanceof NeverType) {
74+
return [];
75+
}
76+
7077
$addTip = function (RuleErrorBuilder $ruleErrorBuilder) use ($scope, $originalNode): RuleErrorBuilder {
7178
if (!$this->treatPhpDocTypesAsCertain) {
7279
return $ruleErrorBuilder;

‎tests/PHPStan/Rules/Comparison/WhileLoopAlwaysTrueConditionRuleTest.php‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use PHPStan\Rules\Rule;
66
use PHPStan\Testing\RuleTestCase;
7+
use PHPUnit\Framework\Attributes\RequiresPhp;
78

89
/**
910
* @extends RuleTestCase<WhileLoopAlwaysTrueConditionRule>
@@ -47,4 +48,10 @@ public function testRule(): void
4748
]);
4849
}
4950

51+
#[RequiresPhp('>= 8.1')]
52+
public function testRulePHP81(): void
53+
{
54+
$this->analyse([__DIR__ . '/data/while-loop-true-php81.php'], []);
55+
}
56+
5057
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /