Skip to content

Commit 9162f23

Browse files
Update Integer::toString()
1 parent 95fbd57 commit 9162f23

17 files changed

+68
-63
lines changed

src/Type/IntegerRangeType.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use PHPStan\Type\Accessory\AccessoryLowercaseStringType;
1414
use PHPStan\Type\Accessory\AccessoryNonFalsyStringType;
1515
use PHPStan\Type\Accessory\AccessoryNumericStringType;
16+
use PHPStan\Type\Accessory\AccessoryUppercaseStringType;
1617
use PHPStan\Type\Constant\ConstantBooleanType;
1718
use PHPStan\Type\Constant\ConstantIntegerType;
1819
use function array_filter;
@@ -487,6 +488,7 @@ public function toString(): Type
487488
return new IntersectionType([
488489
new StringType(),
489490
new AccessoryLowercaseStringType(),
491+
new AccessoryUppercaseStringType(),
490492
new AccessoryNumericStringType(),
491493
new AccessoryNonFalsyStringType(),
492494
]);
@@ -495,6 +497,7 @@ public function toString(): Type
495497
return new IntersectionType([
496498
new StringType(),
497499
new AccessoryLowercaseStringType(),
500+
new AccessoryUppercaseStringType(),
498501
new AccessoryNumericStringType(),
499502
]);
500503
}

src/Type/IntegerType.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use PHPStan\TrinaryLogic;
99
use PHPStan\Type\Accessory\AccessoryLowercaseStringType;
1010
use PHPStan\Type\Accessory\AccessoryNumericStringType;
11+
use PHPStan\Type\Accessory\AccessoryUppercaseStringType;
1112
use PHPStan\Type\Constant\ConstantArrayType;
1213
use PHPStan\Type\Constant\ConstantIntegerType;
1314
use PHPStan\Type\Traits\NonArrayTypeTrait;
@@ -83,6 +84,7 @@ public function toString(): Type
8384
return new IntersectionType([
8485
new StringType(),
8586
new AccessoryLowercaseStringType(),
87+
new AccessoryUppercaseStringType(),
8688
new AccessoryNumericStringType(),
8789
]);
8890
}

tests/PHPStan/Analyser/nsrt/array-key-exists.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,16 @@ public function doBar(array $a, array $b, array $c, int $key1, string $key2, int
5050
assertType('int', $key1);
5151
}
5252
if (array_key_exists($key2, $a)) {
53-
assertType('lowercase-string&numeric-string', $key2);
53+
assertType('lowercase-string&numeric-string&uppercase-string', $key2);
5454
}
5555
if (array_key_exists($key3, $a)) {
56-
assertType('int|(lowercase-string&numeric-string)', $key3);
56+
assertType('int|(lowercase-string&numeric-string&uppercase-string)', $key3);
5757
}
5858
if (array_key_exists($key4, $a)) {
59-
assertType('(int|(lowercase-string&numeric-string))', $key4);
59+
assertType('(int|(lowercase-string&numeric-string&uppercase-string))', $key4);
6060
}
6161
if (array_key_exists($key5, $a)) {
62-
assertType('int|(lowercase-string&numeric-string)', $key5);
62+
assertType('int|(lowercase-string&numeric-string&uppercase-string)', $key5);
6363
}
6464

6565
if (array_key_exists($key1, $b)) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ class Foo
1212
*/
1313
public function doFoo($b): void
1414
{
15-
assertType('lowercase-string&non-falsy-string', '@' . $b);
15+
assertType('lowercase-string&non-falsy-string&uppercase-string', '@' . $b);
1616
}
1717

1818
/**
1919
* @param int|false $b
2020
*/
2121
public function doFoo2($b): void
2222
{
23-
assertType('lowercase-string&non-falsy-string', '@' . $b);
23+
assertType('lowercase-string&non-falsy-string&uppercase-string', '@' . $b);
2424
}
2525

2626
}

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

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ public function foo(
2121
$maybeNegativeConstStrings, $maybeNonNumericConstStrings, $maybeFloatConstStrings,
2222
bool $bool, float $float
2323
): void {
24-
assertType('lowercase-string&non-falsy-string', '0'.$i);
25-
assertType('lowercase-string&non-falsy-string&numeric-string', $i.'0');
24+
assertType('lowercase-string&non-falsy-string&uppercase-string', '0'.$i);
25+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $i.'0');
2626

27-
assertType('lowercase-string&non-falsy-string&numeric-string', '0'.$positiveInt);
28-
assertType('lowercase-string&non-falsy-string&numeric-string', $positiveInt.'0');
27+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', '0'.$positiveInt);
28+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $positiveInt.'0');
2929

30-
assertType('lowercase-string&non-falsy-string', '0'.$negativeInt);
31-
assertType('lowercase-string&non-falsy-string&numeric-string', $negativeInt.'0');
30+
assertType('lowercase-string&non-falsy-string&uppercase-string', '0'.$negativeInt);
31+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $negativeInt.'0');
3232

3333
assertType("'00'|'01'|'02'", '0'.$positiveConstStrings);
3434
assertType( "'00'|'10'|'20'", $positiveConstStrings.'0');
@@ -39,29 +39,29 @@ public function foo(
3939
assertType("'00'|'01'|'0a'", '0'.$maybeNonNumericConstStrings);
4040
assertType("'00'|'10'|'a0'", $maybeNonNumericConstStrings.'0');
4141

42-
assertType('lowercase-string&non-falsy-string&numeric-string', $i.$positiveConstStrings);
43-
assertType('lowercase-string&non-falsy-string', $positiveConstStrings.$i);
42+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $i.$positiveConstStrings);
43+
assertType('lowercase-string&non-falsy-string&uppercase-string', $positiveConstStrings.$i);
4444

45-
assertType('lowercase-string&non-falsy-string', $i.$maybeNegativeConstStrings);
46-
assertType('lowercase-string&non-falsy-string', $maybeNegativeConstStrings.$i);
45+
assertType('lowercase-string&non-falsy-string&uppercase-string', $i.$maybeNegativeConstStrings);
46+
assertType('lowercase-string&non-falsy-string&uppercase-string', $maybeNegativeConstStrings.$i);
4747

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', $i.$maybeFloatConstStrings); // could be 'lowercase-string&non-falsy-string&numeric-string'
52-
assertType('lowercase-string&non-falsy-string', $maybeFloatConstStrings.$i);
51+
assertType('lowercase-string&non-falsy-string&uppercase-string', $i.$maybeFloatConstStrings); // could be 'lowercase-string&non-falsy-string&numeric-string'
52+
assertType('lowercase-string&non-falsy-string&uppercase-string', $maybeFloatConstStrings.$i);
5353

54-
assertType('lowercase-string&non-empty-string&numeric-string', $i.$bool);
55-
assertType('lowercase-string&non-empty-string', $bool.$i);
56-
assertType('lowercase-string&non-falsy-string&numeric-string', $positiveInt.$bool);
57-
assertType('lowercase-string&non-falsy-string&numeric-string', $bool.$positiveInt);
58-
assertType('lowercase-string&non-falsy-string&numeric-string', $negativeInt.$bool);
59-
assertType('lowercase-string&non-falsy-string', $bool.$negativeInt);
54+
assertType('lowercase-string&non-empty-string&numeric-string&uppercase-string', $i.$bool);
55+
assertType('lowercase-string&non-empty-string&uppercase-string', $bool.$i);
56+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $positiveInt.$bool);
57+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $bool.$positiveInt);
58+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $negativeInt.$bool);
59+
assertType('lowercase-string&non-falsy-string&uppercase-string', $bool.$negativeInt);
6060

61-
assertType('lowercase-string&non-falsy-string', $i.$i);
62-
assertType('lowercase-string&non-falsy-string', $negativeInt.$negativeInt);
63-
assertType('lowercase-string&non-falsy-string', $maybeNegativeConstStrings.$negativeInt);
64-
assertType('lowercase-string&non-falsy-string', $negativeInt.$maybeNegativeConstStrings);
61+
assertType('lowercase-string&non-falsy-string&uppercase-string', $i.$i);
62+
assertType('lowercase-string&non-falsy-string&uppercase-string', $negativeInt.$negativeInt);
63+
assertType('lowercase-string&non-falsy-string&uppercase-string', $maybeNegativeConstStrings.$negativeInt);
64+
assertType('lowercase-string&non-falsy-string&uppercase-string', $negativeInt.$maybeNegativeConstStrings);
6565

6666
// https://3v4l.org/BCS2K
6767
assertType('non-falsy-string', $float.$float);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ function narrowKey($mixed, string $s, int $i, array $generalArr, array $intKeyed
7575
assertType('int', $i);
7676

7777
if (isset($intKeyedArr[$s])) {
78-
assertType("lowercase-string&numeric-string", $s);
78+
assertType("lowercase-string&numeric-string&uppercase-string", $s);
7979
} else {
8080
assertType('string', $s);
8181
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@ public function b(): void
2727
$type = array_map(static function (array $result): array {
2828
assertType('array{a: int}', $result);
2929
$result['a'] = (string) $result['a'];
30-
assertType('array{a: lowercase-string&numeric-string}', $result);
30+
assertType('array{a: lowercase-string&numeric-string&uppercase-string}', $result);
3131

3232
return $result;
3333
}, $results);
3434

35-
assertType('list<array{a: lowercase-string&numeric-string}>', $type);
35+
assertType('list<array{a: lowercase-string&numeric-string&uppercase-string}>', $type);
3636
}
3737
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public function inputTypes(int $i, float $f, string $s, int $intRange) {
2929

3030
public function specifiers(int $i) {
3131
// https://3v4l.org/fmVIg
32-
assertType('lowercase-string&numeric-string', sprintf('%14s', $i));
32+
assertType('lowercase-string&numeric-string&uppercase-string', sprintf('%14s', $i));
3333

3434
assertType('lowercase-string&numeric-string', sprintf('%d', $i));
3535

@@ -59,9 +59,9 @@ public function specifiers(int $i) {
5959
*/
6060
public function positionalArgs($mixed, int $i, float $f, string $s, int $posInt, int $negInt, int $nonZeroIntRange, int $intRange) {
6161
// https://3v4l.org/vVL0c
62-
assertType('lowercase-string&numeric-string', sprintf('%2$6s', $mixed, $i));
63-
assertType('lowercase-string&non-falsy-string&numeric-string', sprintf('%2$6s', $mixed, $posInt));
64-
assertType('lowercase-string&non-falsy-string&numeric-string', sprintf('%2$6s', $mixed, $negInt));
62+
assertType('lowercase-string&numeric-string&uppercase-string', sprintf('%2$6s', $mixed, $i));
63+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', sprintf('%2$6s', $mixed, $posInt));
64+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', sprintf('%2$6s', $mixed, $negInt));
6565
assertType("' 1'|' 2'|' 3'|' 4'|' 5'", sprintf('%2$6s', $mixed, $nonZeroIntRange));
6666

6767
// https://3v4l.org/1ECIq

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ class HelloWorld
88
{
99
public function EchoInt(int $value): void
1010
{
11-
assertType('lowercase-string&numeric-string', "$value");
11+
assertType('lowercase-string&numeric-string&uppercase-string', "$value");
1212
}
1313
}

tests/PHPStan/Analyser/nsrt/cast-to-numeric-string.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@
1313
* @param 1 $constantInt
1414
*/
1515
function foo(int $a, float $b, $numeric, $numeric2, $number, $positive, $negative, $constantInt): void {
16-
assertType('lowercase-string&numeric-string', (string)$a);
16+
assertType('lowercase-string&numeric-string&uppercase-string', (string)$a);
1717
assertType('numeric-string', (string)$b);
1818
assertType('numeric-string', (string)$numeric);
1919
assertType('numeric-string', (string)$numeric2);
2020
assertType('numeric-string', (string)$number);
21-
assertType('lowercase-string&non-falsy-string&numeric-string', (string)$positive);
22-
assertType('lowercase-string&non-falsy-string&numeric-string', (string)$negative);
21+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', (string)$positive);
22+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', (string)$negative);
2323
assertType("'1'", (string)$constantInt);
2424
}
2525

@@ -32,28 +32,28 @@ function foo(int $a, float $b, $numeric, $numeric2, $number, $positive, $negativ
3232
* @param 1 $constantInt
3333
*/
3434
function concatEmptyString(int $a, float $b, $numeric, $numeric2, $number, $positive, $negative, $constantInt): void {
35-
assertType('lowercase-string&numeric-string', '' . $a);
35+
assertType('lowercase-string&numeric-string&uppercase-string', '' . $a);
3636
assertType('numeric-string', '' . $b);
3737
assertType('numeric-string', '' . $numeric);
3838
assertType('numeric-string', '' . $numeric2);
3939
assertType('numeric-string', '' . $number);
40-
assertType('lowercase-string&non-falsy-string&numeric-string', '' . $positive);
41-
assertType('lowercase-string&non-falsy-string&numeric-string', '' . $negative);
40+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', '' . $positive);
41+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', '' . $negative);
4242
assertType("'1'", '' . $constantInt);
4343

44-
assertType('lowercase-string&numeric-string', $a . '');
44+
assertType('lowercase-string&numeric-string&uppercase-string', $a . '');
4545
assertType('numeric-string', $b . '');
4646
assertType('numeric-string', $numeric . '');
4747
assertType('numeric-string', $numeric2 . '');
4848
assertType('numeric-string', $number . '');
49-
assertType('lowercase-string&non-falsy-string&numeric-string', $positive . '');
50-
assertType('lowercase-string&non-falsy-string&numeric-string', $negative . '');
49+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $positive . '');
50+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', $negative . '');
5151
assertType("'1'", $constantInt . '');
5252
}
5353

5454
function concatAssignEmptyString(int $i, float $f) {
5555
$i .= '';
56-
assertType('lowercase-string&numeric-string', $i);
56+
assertType('lowercase-string&numeric-string&uppercase-string', $i);
5757

5858
$s = '';
5959
$s .= $f;
@@ -66,13 +66,13 @@ function concatAssignEmptyString(int $i, float $f) {
6666
*/
6767
function integerRangeToString($positive, $negative)
6868
{
69-
assertType('lowercase-string&numeric-string', (string) $positive);
70-
assertType('lowercase-string&numeric-string', (string) $negative);
69+
assertType('lowercase-string&numeric-string&uppercase-string', (string) $positive);
70+
assertType('lowercase-string&numeric-string&uppercase-string', (string) $negative);
7171

7272
if ($positive !== 0) {
73-
assertType('lowercase-string&non-falsy-string&numeric-string', (string) $positive);
73+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', (string) $positive);
7474
}
7575
if ($negative !== 0) {
76-
assertType('lowercase-string&non-falsy-string&numeric-string', (string) $negative);
76+
assertType('lowercase-string&non-falsy-string&numeric-string&uppercase-string', (string) $negative);
7777
}
7878
}

0 commit comments

Comments
 (0)