Skip to content

Commit 3ee1819

Browse files
committed
Improve loose comparison on boolean
1 parent 4d2883b commit 3ee1819

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/Type/BooleanType.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,10 @@ public function isScalar(): TrinaryLogic
133133

134134
public function looseCompare(Type $type, PhpVersion $phpVersion): BooleanType
135135
{
136+
if ($type->isTrue()->yes() || $type->isFalse()->yes()) {
137+
return $type->toBoolean();
138+
}
139+
136140
return new BooleanType();
137141
}
138142

tests/PHPStan/Analyser/nsrt/loose-comparisons.php

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -601,4 +601,52 @@ public function sayEmptyStr(
601601
assertType('false', $emptyStr == $phpStr);
602602
assertType('true', $emptyStr == $emptyStr);
603603
}
604+
605+
/**
606+
* @param true $true
607+
* @param false $false
608+
* @param 1 $one
609+
* @param 0 $zero
610+
* @param -1 $minusOne
611+
* @param '1' $oneStr
612+
* @param '0' $zeroStr
613+
* @param '-1' $minusOneStr
614+
* @param '+1' $plusOneStr
615+
* @param null $null
616+
* @param array{} $emptyArr
617+
* @param 'php' $phpStr
618+
* @param '' $emptyStr
619+
*/
620+
public function sayBool(
621+
$true,
622+
$false,
623+
$one,
624+
$zero,
625+
$minusOne,
626+
$oneStr,
627+
$zeroStr,
628+
$minusOneStr,
629+
$plusOneStr,
630+
$null,
631+
$emptyArr,
632+
$phpStr,
633+
$emptyStr,
634+
bool $bool
635+
): void
636+
{
637+
assertType('true', $bool == $true);
638+
assertType('false', $bool == $false);
639+
assertType('bool', $bool == $one);
640+
assertType('bool', $bool == $zero);
641+
assertType('bool', $bool == $minusOne);
642+
assertType('bool', $bool == $oneStr);
643+
assertType('bool', $bool == $zeroStr);
644+
assertType('bool', $bool == $minusOneStr);
645+
assertType('bool', $bool == $plusOneStr);
646+
assertType('bool', $bool == $null);
647+
assertType('bool', $bool == $emptyArr);
648+
assertType('bool', $bool == $phpStr);
649+
assertType('bool', $bool == $emptyStr);
650+
}
651+
604652
}

0 commit comments

Comments
 (0)