Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions src/Reflection/InitializerExprTypeResolver.php
Original file line number Diff line number Diff line change
Expand Up @@ -1370,9 +1370,6 @@ public function resolveEqualType(Type $leftType, Type $rightType): BooleanType
if (
($leftType->isEnum()->yes() && $rightType->isTrue()->no())
|| ($rightType->isEnum()->yes() && $leftType->isTrue()->no())
|| ($leftType->isString()->yes() && $rightType->isString()->yes())
|| ($leftType->isInteger()->yes() && $rightType->isInteger()->yes())
|| ($leftType->isFloat()->yes() && $rightType->isFloat()->yes())
) {
return $this->resolveIdenticalType($leftType, $rightType);
}
Expand Down
82 changes: 82 additions & 0 deletions tests/PHPStan/Analyser/nsrt/loose-comparisons.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ class HelloWorld
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -31,6 +32,7 @@ public function sayTrue(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -45,6 +47,7 @@ public function sayTrue(
assertType('true', $true == $oneStr);
assertType('false', $true == $zeroStr);
assertType('true', $true == $minusOneStr);
assertType('true', $true == $plusOneStr);
assertType('false', $true == $null);
assertType('false', $true == $emptyArr);
assertType('true', $true == $phpStr);
Expand All @@ -60,6 +63,7 @@ public function sayTrue(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -74,6 +78,7 @@ public function sayFalse(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -88,6 +93,7 @@ public function sayFalse(
assertType('false', $false == $oneStr);
assertType('true', $false == $zeroStr);
assertType('false', $false == $minusOneStr);
assertType('false', $false == $plusOneStr);
assertType('true', $false == $null);
assertType('true', $false == $emptyArr);
assertType('false', $false == $phpStr);
Expand All @@ -103,6 +109,7 @@ public function sayFalse(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -117,6 +124,7 @@ public function sayOne(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -131,6 +139,7 @@ public function sayOne(
assertType('true', $one == $oneStr);
assertType('false', $one == $zeroStr);
assertType('false', $one == $minusOneStr);
assertType('true', $one == $plusOneStr);
assertType('false', $one == $null);
assertType('false', $one == $emptyArr);
assertType('false', $one == $phpStr);
Expand All @@ -146,6 +155,7 @@ public function sayOne(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -160,6 +170,7 @@ public function sayZero(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -174,6 +185,7 @@ public function sayZero(
assertType('false', $zero == $oneStr);
assertType('true', $zero == $zeroStr);
assertType('false', $zero == $minusOneStr);
assertType('false', $zero == $plusOneStr);
assertType('true', $zero == $null);
assertType('false', $zero == $emptyArr);
}
Expand All @@ -187,6 +199,7 @@ public function sayZero(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -201,6 +214,7 @@ public function sayMinusOne(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -215,6 +229,7 @@ public function sayMinusOne(
assertType('false', $minusOne == $oneStr);
assertType('false', $minusOne == $zeroStr);
assertType('true', $minusOne == $minusOneStr);
assertType('false', $minusOne == $plusOneStr);
assertType('false', $minusOne == $null);
assertType('false', $minusOne == $emptyArr);
assertType('false', $minusOne == $phpStr);
Expand All @@ -230,6 +245,7 @@ public function sayMinusOne(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -244,6 +260,7 @@ public function sayOneStr(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -258,6 +275,7 @@ public function sayOneStr(
assertType('true', $oneStr == $oneStr);
assertType('false', $oneStr == $zeroStr);
assertType('false', $oneStr == $minusOneStr);
assertType('true', $oneStr == $plusOneStr);
assertType('false', $oneStr == $null);
assertType('false', $oneStr == $emptyArr);
assertType('false', $oneStr == $phpStr);
Expand All @@ -273,6 +291,7 @@ public function sayOneStr(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -287,6 +306,7 @@ public function sayZeroStr(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -301,6 +321,7 @@ public function sayZeroStr(
assertType('false', $zeroStr == $oneStr);
assertType('true', $zeroStr == $zeroStr);
assertType('false', $zeroStr == $minusOneStr);
assertType('false', $zeroStr == $plusOneStr);
assertType('false', $zeroStr == $null);
assertType('false', $zeroStr == $emptyArr);
assertType('false', $zeroStr == $phpStr);
Expand All @@ -316,6 +337,7 @@ public function sayZeroStr(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -330,6 +352,7 @@ public function sayMinusOneStr(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -344,6 +367,7 @@ public function sayMinusOneStr(
assertType('false', $minusOneStr == $oneStr);
assertType('false', $minusOneStr == $zeroStr);
assertType('true', $minusOneStr == $minusOneStr);
assertType('false', $minusOneStr == $plusOneStr);
assertType('false', $minusOneStr == $null);
assertType('false', $minusOneStr == $emptyArr);
assertType('false', $minusOneStr == $phpStr);
Expand All @@ -359,6 +383,53 @@ public function sayMinusOneStr(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
* @param '' $emptyStr
*/
public function sayPlusOneStr(
$true,
$false,
$one,
$zero,
$minusOne,
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
$emptyStr
): void
{
assertType('true', $plusOneStr == $true);
assertType('false', $plusOneStr == $false);
assertType('true', $plusOneStr == $one);
assertType('false', $plusOneStr == $zero);
assertType('false', $plusOneStr == $minusOne);
assertType('true', $plusOneStr == $oneStr);
assertType('false', $plusOneStr == $zeroStr);
assertType('false', $plusOneStr == $minusOneStr);
assertType('true', $plusOneStr == $plusOneStr);
assertType('false', $plusOneStr == $null);
assertType('false', $plusOneStr == $emptyArr);
assertType('false', $plusOneStr == $phpStr);
assertType('false', $plusOneStr == $emptyStr);
}

/**
* @param true $true
* @param false $false
* @param 1 $one
* @param 0 $zero
* @param -1 $minusOne
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -373,6 +444,7 @@ public function sayNull(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -387,6 +459,7 @@ public function sayNull(
assertType('false', $null == $oneStr);
assertType('false', $null == $zeroStr);
assertType('false', $null == $minusOneStr);
assertType('false', $null == $plusOneStr);
assertType('true', $null == $null);
assertType('true', $null == $emptyArr);
assertType('false', $null == $phpStr);
Expand All @@ -402,6 +475,7 @@ public function sayNull(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -416,6 +490,7 @@ public function sayEmptyArray(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -430,6 +505,7 @@ public function sayEmptyArray(
assertType('false', $emptyArr == $oneStr);
assertType('false', $emptyArr == $zeroStr);
assertType('false', $emptyArr == $minusOneStr);
assertType('false', $emptyArr == $plusOneStr);
assertType('true', $emptyArr == $null);
assertType('true', $emptyArr == $emptyArr);
assertType('false', $emptyArr == $phpStr);
Expand All @@ -445,6 +521,7 @@ public function sayEmptyArray(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -459,6 +536,7 @@ public function sayNonFalsyStr(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -472,6 +550,7 @@ public function sayNonFalsyStr(
assertType('false', $phpStr == $oneStr);
assertType('false', $phpStr == $zeroStr);
assertType('false', $phpStr == $minusOneStr);
assertType('false', $phpStr == $plusOneStr);
assertType('false', $phpStr == $null);
assertType('false', $phpStr == $emptyArr);
assertType('true', $phpStr == $phpStr);
Expand All @@ -487,6 +566,7 @@ public function sayNonFalsyStr(
* @param '1' $oneStr
* @param '0' $zeroStr
* @param '-1' $minusOneStr
* @param '+1' $plusOneStr
* @param null $null
* @param array{} $emptyArr
* @param 'php' $phpStr
Expand All @@ -501,6 +581,7 @@ public function sayEmptyStr(
$oneStr,
$zeroStr,
$minusOneStr,
$plusOneStr,
$null,
$emptyArr,
$phpStr,
Expand All @@ -514,6 +595,7 @@ public function sayEmptyStr(
assertType('false', $emptyStr == $oneStr);
assertType('false', $emptyStr == $zeroStr);
assertType('false', $emptyStr == $minusOneStr);
assertType('false', $emptyStr == $plusOneStr);
assertType('true', $emptyStr == $null);
assertType('false', $emptyStr == $emptyArr);
assertType('false', $emptyStr == $phpStr);
Expand Down
Loading