From b31db0e11e7fe1c05699b673584b0ee0e5eb3ab5 Mon Sep 17 00:00:00 2001 From: Martin Herndl Date: Wed, 4 May 2022 09:30:48 +0200 Subject: [PATCH] Specifiy `json_decode` default return type --- resources/functionMap.php | 2 +- tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php | 6 +++--- .../Analyser/data/json-decode/json_object_as_array.php | 10 +++++----- .../PHPStan/Analyser/data/json-decode/narrow_type.php | 4 ++-- .../data/json-decode/narrow_type_with_force_array.php | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/resources/functionMap.php b/resources/functionMap.php index 86638947e2a..261cc0270e5 100644 --- a/resources/functionMap.php +++ b/resources/functionMap.php @@ -5689,7 +5689,7 @@ 'join' => ['string', 'glue'=>'string', 'pieces'=>'array'], 'join\'1' => ['string', 'pieces'=>'array'], 'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], -'json_decode' => ['mixed', 'json'=>'string', 'assoc='=>'bool', 'depth='=>'positive-int', 'options='=>'int'], +'json_decode' => ['mixed[]|scalar|stdClass|null', 'json'=>'string', 'assoc='=>'bool', 'depth='=>'positive-int', 'options='=>'int'], 'json_encode' => ['string|false', 'data'=>'mixed', 'options='=>'int', 'depth='=>'positive-int'], 'json_last_error' => ['int'], 'json_last_error_msg' => ['string'], diff --git a/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php b/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php index 19aef9b64a9..2d92e72a2c9 100644 --- a/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php +++ b/tests/PHPStan/Analyser/LegacyNodeScopeResolverTest.php @@ -8699,15 +8699,15 @@ public function dataPhp73Functions(): array 'json_encode($mixed, $integer | JSON_THROW_ON_ERROR | JSON_NUMERIC_CHECK)', ], [ - 'mixed', + 'array|bool|float|int|stdClass|string|null', 'json_decode($mixed)', ], [ - 'mixed', + 'array|bool|float|int|stdClass|string|null', 'json_decode($mixed, false, 512, JSON_THROW_ON_ERROR | JSON_NUMERIC_CHECK)', ], [ - 'mixed', + 'array|bool|float|int|stdClass|string|null', 'json_decode($mixed, false, 512, $integer | JSON_THROW_ON_ERROR | JSON_NUMERIC_CHECK)', ], [ diff --git a/tests/PHPStan/Analyser/data/json-decode/json_object_as_array.php b/tests/PHPStan/Analyser/data/json-decode/json_object_as_array.php index cf8b093fae4..b788759ef72 100644 --- a/tests/PHPStan/Analyser/data/json-decode/json_object_as_array.php +++ b/tests/PHPStan/Analyser/data/json-decode/json_object_as_array.php @@ -7,27 +7,27 @@ // @see https://3v4l.org/YFlHF function ($mixed) { $value = json_decode($mixed, null, 512, JSON_OBJECT_AS_ARRAY); - assertType('mixed~stdClass', $value); + assertType('array|bool|float|int|string|null', $value); }; function ($mixed) { $flagsAsVariable = JSON_OBJECT_AS_ARRAY; $value = json_decode($mixed, null, 512, $flagsAsVariable); - assertType('mixed~stdClass', $value); + assertType('array|bool|float|int|string|null', $value); }; function ($mixed) { $value = json_decode($mixed, null, 512, JSON_OBJECT_AS_ARRAY | JSON_BIGINT_AS_STRING); - assertType('mixed~stdClass', $value); + assertType('array|bool|float|int|string|null', $value); }; function ($mixed) { $value = json_decode($mixed, null); - assertType('mixed', $value); + assertType('array|bool|float|int|stdClass|string|null', $value); }; function ($mixed, $unknownFlags) { $value = json_decode($mixed, null, 512, $unknownFlags); - assertType('mixed', $value); + assertType('array|bool|float|int|stdClass|string|null', $value); }; diff --git a/tests/PHPStan/Analyser/data/json-decode/narrow_type.php b/tests/PHPStan/Analyser/data/json-decode/narrow_type.php index b00f971b56e..1a936a1925b 100644 --- a/tests/PHPStan/Analyser/data/json-decode/narrow_type.php +++ b/tests/PHPStan/Analyser/data/json-decode/narrow_type.php @@ -25,10 +25,10 @@ function ($mixed) { $value = json_decode($mixed); - assertType('mixed', $value); + assertType('array|bool|float|int|stdClass|string|null', $value); }; function ($mixed) { $value = json_decode($mixed, false); - assertType('mixed', $value); + assertType('array|bool|float|int|stdClass|string|null', $value); }; diff --git a/tests/PHPStan/Analyser/data/json-decode/narrow_type_with_force_array.php b/tests/PHPStan/Analyser/data/json-decode/narrow_type_with_force_array.php index 479085c8147..e83024213e4 100644 --- a/tests/PHPStan/Analyser/data/json-decode/narrow_type_with_force_array.php +++ b/tests/PHPStan/Analyser/data/json-decode/narrow_type_with_force_array.php @@ -24,5 +24,5 @@ function ($mixed) { $value = json_decode($mixed, true); - assertType('mixed~stdClass', $value); + assertType('array|bool|float|int|string|null', $value); };