Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Changelog
### Fixed

- Corrected `isList` type documentation
- Corrected `isAOf` type documentation

## 2.1.2

Expand Down
51 changes: 26 additions & 25 deletions src/Assert.php
Original file line number Diff line number Diff line change
Expand Up @@ -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<ExpectedType> $class
* @psalm-param class-string<T> $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)) {
Expand All @@ -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<ExpectedType> $class
* @psalm-assert object $value
* @psalm-param class-string<T> $class
*
* @return !ExpectedType
* @return !T
*
* @throws InvalidArgumentException
*/
Expand All @@ -527,10 +525,13 @@ public static function notInstanceOf(mixed $value, mixed $class, string $message
}

/**
* @psalm-pure
* @template T of object
*
* @param array<object|string> $classes
* @psalm-param array<class-string> $classes
* @psalm-assert T $value
*
* @param T $value
*
* @return T
*
* @throws InvalidArgumentException
*/
Expand All @@ -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;
}
Expand All @@ -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<ExpectedType> $value
* @psalm-assert T|class-string<T> $value
*
* @param ExpectedType|class-string<ExpectedType> $value
* @param class-string<ExpectedType> $class
*
* @return ExpectedType|class-string<ExpectedType>
* @return T
*
* @throws InvalidArgumentException
*/
Expand All @@ -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<UnexpectedType> $class
* @psalm-assert object|class-string $value
*
* @psalm-return !UnexpectedType
* @param T $value
*
* @return T
*
* @throws InvalidArgumentException
*/
Expand Down Expand Up @@ -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))) {
Expand Down
126 changes: 49 additions & 77 deletions src/Mixin.php
Original file line number Diff line number Diff line change
Expand Up @@ -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<ExpectedType> $class
* @template T of object
* @psalm-assert T|null $value
*
* @return ExpectedType|null
* @psalm-param class-string<T> $class
* @return T|null
*
* @throws InvalidArgumentException
*/
Expand All @@ -1162,12 +1161,11 @@ public static function nullOrIsInstanceOf(mixed $value, mixed $class, string $me
/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert iterable<ExpectedType> $value
* @template T of object
* @psalm-assert iterable<T> $value
*
* @param class-string<ExpectedType> $class
*
* @return iterable<ExpectedType>
* @psalm-param class-string<T> $class
* @return iterable<T>
*
* @throws InvalidArgumentException
*/
Expand All @@ -1185,12 +1183,11 @@ public static function allIsInstanceOf(mixed $value, mixed $class, string $messa
/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert iterable<ExpectedType|null> $value
* @template T of object
* @psalm-assert iterable<T|null> $value
*
* @param class-string<ExpectedType> $class
*
* @return iterable<ExpectedType|null>
* @psalm-param class-string<T> $class
* @return iterable<T|null>
*
* @throws InvalidArgumentException
*/
Expand All @@ -1206,12 +1203,8 @@ public static function allNullOrIsInstanceOf(mixed $value, mixed $class, string
}

/**
* @psalm-pure
*
* @template ExpectedType of object
*
* @param class-string<ExpectedType> $class
*
* @template T of object
* @psalm-param class-string<T> $class
* @return mixed
*
* @throws InvalidArgumentException
Expand All @@ -1224,12 +1217,8 @@ public static function nullOrNotInstanceOf(mixed $value, mixed $class, string $m
}

/**
* @psalm-pure
*
* @template ExpectedType of object
*
* @param class-string<ExpectedType> $class
*
* @template T of object
* @psalm-param class-string<T> $class
* @return mixed
*
* @throws InvalidArgumentException
Expand All @@ -1246,14 +1235,11 @@ public static function allNotInstanceOf(mixed $value, mixed $class, string $mess
}

/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert iterable<!ExpectedType|null> $value
*
* @param class-string<ExpectedType> $class
* @template T of object
* @psalm-assert iterable<object|null> $value
*
* @return iterable<!ExpectedType|null>
* @psalm-param class-string<T> $class
* @return iterable<object|null>
*
* @throws InvalidArgumentException
*/
Expand All @@ -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<object|string> $classes
* @param T|null $value
*
* @psalm-param array<class-string> $classes
*
* @return mixed
* @return T|null
*
* @throws InvalidArgumentException
*/
Expand All @@ -1287,13 +1272,12 @@ public static function nullOrIsInstanceOfAny(mixed $value, mixed $classes, strin
}

/**
* @psalm-pure
* @template T of object
* @psalm-assert iterable<T> $value
*
* @param array<object|string> $classes
* @param iterable<T> $value
*
* @psalm-param array<class-string> $classes
*
* @return mixed
* @return iterable<T>
*
* @throws InvalidArgumentException
*/
Expand All @@ -1309,13 +1293,12 @@ public static function allIsInstanceOfAny(mixed $value, mixed $classes, string $
}

/**
* @psalm-pure
* @template T of object
* @psalm-assert iterable<T|null> $value
*
* @param array<object|string> $classes
* @param iterable<T|null> $value
*
* @psalm-param array<class-string> $classes
*
* @return mixed
* @return iterable<T|null>
*
* @throws InvalidArgumentException
*/
Expand All @@ -1333,13 +1316,10 @@ public static function allNullOrIsInstanceOfAny(mixed $value, mixed $classes, st
/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert ExpectedType|class-string<ExpectedType>|null $value
*
* @param ExpectedType|class-string<ExpectedType>|null $value
* @param class-string<ExpectedType> $class
* @template T of object
* @psalm-assert T|class-string<T>|null $value
*
* @return ExpectedType|class-string<ExpectedType>|null
* @return T|class-string<T>|null
*
* @throws InvalidArgumentException
*/
Expand All @@ -1353,13 +1333,10 @@ public static function nullOrIsAOf(mixed $value, mixed $class, string $message =
/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert iterable<ExpectedType|class-string<ExpectedType>> $value
*
* @param iterable<ExpectedType|class-string<ExpectedType>> $value
* @param class-string<ExpectedType> $class
* @template T of object
* @psalm-assert iterable<T|class-string<T>> $value
*
* @return iterable<ExpectedType|class-string<ExpectedType>>
* @return iterable<T|class-string<T>>
*
* @throws InvalidArgumentException
*/
Expand All @@ -1377,13 +1354,10 @@ public static function allIsAOf(mixed $value, mixed $class, string $message = ''
/**
* @psalm-pure
*
* @template ExpectedType of object
* @psalm-assert iterable<ExpectedType|class-string<ExpectedType>|null> $value
*
* @param iterable<ExpectedType|class-string<ExpectedType>|null> $value
* @param class-string<ExpectedType> $class
* @template T of object
* @psalm-assert iterable<T|class-string<T>|null> $value
*
* @return iterable<ExpectedType|class-string<ExpectedType>|null>
* @return iterable<T|class-string<T>|null>
*
* @throws InvalidArgumentException
*/
Expand All @@ -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<UnexpectedType> $class
* @param T|null $value
*
* @return mixed
*
Expand All @@ -1420,10 +1393,9 @@ public static function nullOrIsNotA(mixed $value, mixed $class, string $message
/**
* @psalm-pure
*
* @template UnexpectedType of object
* @template T
*
* @param iterable<object|string> $value
* @param class-string<UnexpectedType> $class
* @param iterable<T> $value
*
* @return mixed
*
Expand All @@ -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<object|class-string|null> $value
*
* @param iterable<object|string|null> $value
* @param class-string<UnexpectedType> $class
* @param iterable<T|null> $value
*
* @return mixed
* @return iterable<object|class-string|null>
*
* @throws InvalidArgumentException
*/
Expand Down
Loading