Skip to content

Commit 23a3a4a

Browse files
Improve concat result
1 parent bab0af7 commit 23a3a4a

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
@@ -506,6 +506,8 @@ public function resolveConcatType(Type $left, Type $right): Type
506506

507507
$leftNumericStringNonEmpty = TypeCombinator::remove($leftStringType, new ConstantStringType(''));
508508
if ($leftNumericStringNonEmpty->isNumericString()->yes()) {
509+
$allowedPattern = $left->isInteger()->yes() ? '#^[0-9.]+$#' : '#^[0-9]+$#';
510+
509511
$allRightConstantsZeroOrMore = false;
510512
foreach ($rightConstantStrings as $rightConstantString) {
511513
if ($rightConstantString->getValue() === '') {
@@ -514,7 +516,7 @@ public function resolveConcatType(Type $left, Type $right): Type
514516

515517
if (
516518
!is_numeric($rightConstantString->getValue())
517-
|| Strings::match($rightConstantString->getValue(), '#^[0-9]+$#') === null
519+
|| Strings::match($rightConstantString->getValue(), $allowedPattern) === null
518520
) {
519521
$allRightConstantsZeroOrMore = false;
520522
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)