Skip to content

Commit 5d73861

Browse files
VincentLangletondrejmirtes
authored andcommitted
Improve concat result
1 parent 1d86de8 commit 5d73861

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

src/Reflection/InitializerExprTypeResolver.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,8 @@ public function resolveConcatType(Type $left, Type $right): Type
588588

589589
$leftNumericStringNonEmpty = TypeCombinator::remove($leftStringType, new ConstantStringType(''));
590590
if ($leftNumericStringNonEmpty->isNumericString()->yes()) {
591+
$allowedPattern = $left->isInteger()->yes() ? '#^[0-9.]+$#' : '#^[0-9]+$#';
592+
591593
$allRightConstantsZeroOrMore = false;
592594
foreach ($rightConstantStrings as $rightConstantString) {
593595
if ($rightConstantString->getValue() === '') {
@@ -596,7 +598,7 @@ public function resolveConcatType(Type $left, Type $right): Type
596598

597599
if (
598600
!is_numeric($rightConstantString->getValue())
599-
|| Strings::match($rightConstantString->getValue(), '#^[0-9]+$#') === null
601+
|| Strings::match($rightConstantString->getValue(), $allowedPattern) === null
600602
) {
601603
$allRightConstantsZeroOrMore = false;
602604
break;

tests/PHPStan/Analyser/nsrt/bug-11129.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public function foo(
4848
assertType('lowercase-string&non-falsy-string', $i.$maybeNonNumericConstStrings);
4949
assertType('lowercase-string&non-falsy-string', $maybeNonNumericConstStrings.$i);
5050

51-
assertType('lowercase-string&non-falsy-string&uppercase-string', $i.$maybeFloatConstStrings); // could be 'lowercase-string&non-falsy-string&numeric-string'
51+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $i.$maybeFloatConstStrings);
5252
assertType('lowercase-string&non-falsy-string&uppercase-string', $maybeFloatConstStrings.$i);
5353

5454
assertType('lowercase-string&non-empty-string&numeric-string&uppercase-string', $i.$bool);
@@ -68,7 +68,7 @@ public function foo(
6868
assertType('non-falsy-string&numeric-string&uppercase-string', $float.$positiveInt);
6969
assertType('non-falsy-string&uppercase-string', $float.$negativeInt);
7070
assertType('non-falsy-string&uppercase-string', $float.$i);
71-
assertType('non-falsy-string&uppercase-string', $i.$float); // could be 'non-falsy-string&numeric-string&uppercase-string'
71+
assertType('non-falsy-string&uppercase-string', $i.$float);
7272
assertType('non-falsy-string', $numericString.$float);
7373
assertType('non-falsy-string', $numericString.$maybeFloatConstStrings);
7474

0 commit comments

Comments
 (0)