diff --git a/CHANGELOG.md b/CHANGELOG.md index 0854f36c..fb4b24fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ Changelog ### Fixed - Corrected `isList` type documentation +- Corrected `isAOf` type documentation ## 2.1.2 diff --git a/src/Assert.php b/src/Assert.php index 6834e5c4..4c5c8d37 100644 --- a/src/Assert.php +++ b/src/Assert.php @@ -472,18 +472,19 @@ public static function isIterable(mixed $value, string $message = ''): iterable /** * @psalm-pure * - * @template ExpectedType of object + * @template T of object * - * @psalm-assert ExpectedType $value + * @psalm-assert T $value * - * @param class-string $class + * @psalm-param class-string $class * - * @return ExpectedType + * @return T * * @throws InvalidArgumentException */ public static function isInstanceOf(mixed $value, mixed $class, string $message = ''): object { + static::object($value); static::string($class, 'Expected class as a string. Got: %s'); if (!($value instanceof $class)) { @@ -498,15 +499,12 @@ public static function isInstanceOf(mixed $value, mixed $class, string $message } /** - * @psalm-pure - * - * @template ExpectedType of object + * @template T of object * - * @psalm-assert !ExpectedType $value - * - * @param class-string $class + * @psalm-assert object $value + * @psalm-param class-string $class * - * @return !ExpectedType + * @return !T * * @throws InvalidArgumentException */ @@ -527,10 +525,13 @@ public static function notInstanceOf(mixed $value, mixed $class, string $message } /** - * @psalm-pure + * @template T of object * - * @param array $classes - * @psalm-param array $classes + * @psalm-assert T $value + * + * @param T $value + * + * @return T * * @throws InvalidArgumentException */ @@ -540,6 +541,8 @@ public static function isInstanceOfAny(mixed $value, mixed $classes, string $mes static::isIterable($classes); foreach ($classes as $class) { + static::string($class, 'Expected class as a string. Got: %s'); + if ($value instanceof $class) { return $value; } @@ -555,14 +558,11 @@ public static function isInstanceOfAny(mixed $value, mixed $classes, string $mes /** * @psalm-pure * - * @template ExpectedType of object + * @template T of object * - * @psalm-assert ExpectedType|class-string $value + * @psalm-assert T|class-string $value * - * @param ExpectedType|class-string $value - * @param class-string $class - * - * @return ExpectedType|class-string + * @return T * * @throws InvalidArgumentException */ @@ -584,12 +584,13 @@ public static function isAOf(mixed $value, mixed $class, string $message = ''): /** * @psalm-pure * - * @template UnexpectedType of object + * @template T * - * @param object|string $value - * @param class-string $class + * @psalm-assert object|class-string $value * - * @psalm-return !UnexpectedType + * @param T $value + * + * @return T * * @throws InvalidArgumentException */ @@ -620,10 +621,10 @@ public static function isNotA(mixed $value, mixed $class, string $message = ''): */ public static function isAnyOf(mixed $value, mixed $classes, string $message = ''): object|string { + static::objectish($value); static::isIterable($classes); foreach ($classes as $class) { - static::objectish($value); static::string($class, 'Expected class as a string. Got: %s'); if (\is_a($value, $class, \is_string($value))) { diff --git a/src/Mixin.php b/src/Mixin.php index 31acc8e1..17ce9532 100644 --- a/src/Mixin.php +++ b/src/Mixin.php @@ -1143,12 +1143,11 @@ public static function allNullOrIsIterable(mixed $value, string $message = ''): /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert ExpectedType|null $value - * - * @param class-string $class + * @template T of object + * @psalm-assert T|null $value * - * @return ExpectedType|null + * @psalm-param class-string $class + * @return T|null * * @throws InvalidArgumentException */ @@ -1162,12 +1161,11 @@ public static function nullOrIsInstanceOf(mixed $value, mixed $class, string $me /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert iterable $value + * @template T of object + * @psalm-assert iterable $value * - * @param class-string $class - * - * @return iterable + * @psalm-param class-string $class + * @return iterable * * @throws InvalidArgumentException */ @@ -1185,12 +1183,11 @@ public static function allIsInstanceOf(mixed $value, mixed $class, string $messa /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert iterable $value + * @template T of object + * @psalm-assert iterable $value * - * @param class-string $class - * - * @return iterable + * @psalm-param class-string $class + * @return iterable * * @throws InvalidArgumentException */ @@ -1206,12 +1203,8 @@ public static function allNullOrIsInstanceOf(mixed $value, mixed $class, string } /** - * @psalm-pure - * - * @template ExpectedType of object - * - * @param class-string $class - * + * @template T of object + * @psalm-param class-string $class * @return mixed * * @throws InvalidArgumentException @@ -1224,12 +1217,8 @@ public static function nullOrNotInstanceOf(mixed $value, mixed $class, string $m } /** - * @psalm-pure - * - * @template ExpectedType of object - * - * @param class-string $class - * + * @template T of object + * @psalm-param class-string $class * @return mixed * * @throws InvalidArgumentException @@ -1246,14 +1235,11 @@ public static function allNotInstanceOf(mixed $value, mixed $class, string $mess } /** - * @psalm-pure - * - * @template ExpectedType of object - * @psalm-assert iterable $value - * - * @param class-string $class + * @template T of object + * @psalm-assert iterable $value * - * @return iterable + * @psalm-param class-string $class + * @return iterable * * @throws InvalidArgumentException */ @@ -1269,13 +1255,12 @@ public static function allNullOrNotInstanceOf(mixed $value, mixed $class, string } /** - * @psalm-pure + * @template T of object + * @psalm-assert T|null $value * - * @param array $classes + * @param T|null $value * - * @psalm-param array $classes - * - * @return mixed + * @return T|null * * @throws InvalidArgumentException */ @@ -1287,13 +1272,12 @@ public static function nullOrIsInstanceOfAny(mixed $value, mixed $classes, strin } /** - * @psalm-pure + * @template T of object + * @psalm-assert iterable $value * - * @param array $classes + * @param iterable $value * - * @psalm-param array $classes - * - * @return mixed + * @return iterable * * @throws InvalidArgumentException */ @@ -1309,13 +1293,12 @@ public static function allIsInstanceOfAny(mixed $value, mixed $classes, string $ } /** - * @psalm-pure + * @template T of object + * @psalm-assert iterable $value * - * @param array $classes + * @param iterable $value * - * @psalm-param array $classes - * - * @return mixed + * @return iterable * * @throws InvalidArgumentException */ @@ -1333,13 +1316,10 @@ public static function allNullOrIsInstanceOfAny(mixed $value, mixed $classes, st /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert ExpectedType|class-string|null $value - * - * @param ExpectedType|class-string|null $value - * @param class-string $class + * @template T of object + * @psalm-assert T|class-string|null $value * - * @return ExpectedType|class-string|null + * @return T|class-string|null * * @throws InvalidArgumentException */ @@ -1353,13 +1333,10 @@ public static function nullOrIsAOf(mixed $value, mixed $class, string $message = /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert iterable> $value - * - * @param iterable> $value - * @param class-string $class + * @template T of object + * @psalm-assert iterable> $value * - * @return iterable> + * @return iterable> * * @throws InvalidArgumentException */ @@ -1377,13 +1354,10 @@ public static function allIsAOf(mixed $value, mixed $class, string $message = '' /** * @psalm-pure * - * @template ExpectedType of object - * @psalm-assert iterable|null> $value - * - * @param iterable|null> $value - * @param class-string $class + * @template T of object + * @psalm-assert iterable|null> $value * - * @return iterable|null> + * @return iterable|null> * * @throws InvalidArgumentException */ @@ -1401,10 +1375,9 @@ public static function allNullOrIsAOf(mixed $value, mixed $class, string $messag /** * @psalm-pure * - * @template UnexpectedType of object + * @template T * - * @param object|string|null $value - * @param class-string $class + * @param T|null $value * * @return mixed * @@ -1420,10 +1393,9 @@ public static function nullOrIsNotA(mixed $value, mixed $class, string $message /** * @psalm-pure * - * @template UnexpectedType of object + * @template T * - * @param iterable $value - * @param class-string $class + * @param iterable $value * * @return mixed * @@ -1443,12 +1415,12 @@ public static function allIsNotA(mixed $value, mixed $class, string $message = ' /** * @psalm-pure * - * @template UnexpectedType of object + * @template T + * @psalm-assert iterable $value * - * @param iterable $value - * @param class-string $class + * @param iterable $value * - * @return mixed + * @return iterable * * @throws InvalidArgumentException */ diff --git a/tests/static-analysis/assert-isInstanceOfAny.php b/tests/static-analysis/assert-isInstanceOfAny.php index f4823462..5274b72e 100644 --- a/tests/static-analysis/assert-isInstanceOfAny.php +++ b/tests/static-analysis/assert-isInstanceOfAny.php @@ -7,8 +7,6 @@ use Webmozart\Assert\Assert; /** - * @psalm-pure - * * @param mixed $value * @param array $classes */ @@ -20,8 +18,6 @@ function isInstanceOfAny($value, array $classes): mixed } /** - * @psalm-pure - * * @param mixed $value * @param array $classes */ @@ -33,8 +29,6 @@ function nullOrIsInstanceOfAny($value, array $classes): mixed } /** - * @psalm-pure - * * @param mixed $value * @param array $classes */ @@ -46,8 +40,6 @@ function allIsInstanceOfAny($value, array $classes): mixed } /** - * @psalm-pure - * * @param mixed $value * @param array $classes */ diff --git a/tests/static-analysis/assert-notInstanceOf.php b/tests/static-analysis/assert-notInstanceOf.php index d91fd921..7f627256 100644 --- a/tests/static-analysis/assert-notInstanceOf.php +++ b/tests/static-analysis/assert-notInstanceOf.php @@ -9,8 +9,6 @@ use Webmozart\Assert\Assert; /** - * @psalm-pure - * * @param stdClass|DateTime $value */ function notInstanceOf(mixed $value): DateTime @@ -21,8 +19,6 @@ function notInstanceOf(mixed $value): DateTime } /** - * @psalm-pure - * * @psalm-template T of object * * @param mixed $value @@ -36,8 +32,6 @@ function nullOrNotInstanceOf($value, $class): mixed } /** - * @psalm-pure - * * @psalm-template T of object * * @param mixed $value @@ -51,8 +45,6 @@ function allNotInstanceOf($value, $class): mixed } /** - * @psalm-pure - * * @psalm-template T of object * * @param mixed $value