diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 650f8ed42..4e123d37e 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -11,6 +11,9 @@ 'no_superfluous_phpdoc_tags' => [ 'allow_mixed' => true, ], + 'phpdoc_align' => [ + 'align' => 'left' + ], 'phpdoc_order_by_value' => [ 'annotations' => [ 'throws', diff --git a/benchmarks/Utils/SchemaGenerator.php b/benchmarks/Utils/SchemaGenerator.php index 579e1c6a5..71809a58d 100644 --- a/benchmarks/Utils/SchemaGenerator.php +++ b/benchmarks/Utils/SchemaGenerator.php @@ -157,9 +157,9 @@ protected function createFieldArgs(string $fieldName, string $typeName): array } /** - * @param mixed $root + * @param mixed $root * @param array<string, mixed> $args - * @param mixed $context + * @param mixed $context */ public function resolveField($root, array $args, $context, ResolveInfo $resolveInfo): string { diff --git a/docs/class-reference.md b/docs/class-reference.md index 35f8d46a1..8b050101c 100644 --- a/docs/class-reference.md +++ b/docs/class-reference.md @@ -50,10 +50,10 @@ See [related documentation](executing-queries.md). * Empty array would allow to skip query validation (may be convenient for persisted * queries which are validated before persisting and assumed valid during execution) * - * @param string|DocumentNode $source - * @param mixed $rootValue - * @param mixed $contextValue - * @param array<string, mixed>|null $variableValues + * @param string|DocumentNode $source + * @param mixed $rootValue + * @param mixed $contextValue + * @param array<string, mixed>|null $variableValues * @param array<ValidationRule>|null $validationRules * * @api @@ -1355,8 +1355,8 @@ Implements the "Evaluating requests" section of the GraphQL specification. * Always returns ExecutionResult and never throws. * All errors which occur during operation execution are collected in `$result->errors`. * - * @param mixed $rootValue - * @param mixed $contextValue + * @param mixed $rootValue + * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver @@ -1383,8 +1383,8 @@ static function execute( * * Useful for async PHP platforms. * - * @param mixed $rootValue - * @param mixed $contextValue + * @param mixed $rootValue + * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver diff --git a/generate-class-reference.php b/generate-class-reference.php index a39c1a30f..0dc33772a 100644 --- a/generate-class-reference.php +++ b/generate-class-reference.php @@ -39,7 +39,7 @@ ]; /** - * @param ReflectionClass<object> $class + * @param ReflectionClass<object> $class * @param array{constants?: bool, props?: bool, methods?: bool} $options * * @throws ExceptionInterface diff --git a/src/Error/Error.php b/src/Error/Error.php index d644ed103..3491610ac 100644 --- a/src/Error/Error.php +++ b/src/Error/Error.php @@ -74,10 +74,10 @@ class Error extends \Exception implements \JsonSerializable, ClientAware, Provid /** * @param iterable<array-key, Node|null>|Node|null $nodes - * @param array<int, int>|null $positions - * @param list<int|string>|null $path - * @param array<string, mixed>|null $extensions - * @param list<int|string>|null $unaliasedPath + * @param array<int, int>|null $positions + * @param list<int|string>|null $path + * @param array<string, mixed>|null $extensions + * @param list<int|string>|null $unaliasedPath */ public function __construct( string $message = '', @@ -125,10 +125,10 @@ public function __construct( * GraphQL operation, produce a new GraphQLError aware of the location in the * document responsible for the original Error. * - * @param mixed $error - * @param iterable<Node>|Node|null $nodes - * @param list<int|string>|null $path - * @param list<int|string>|null $unaliasedPath + * @param mixed $error + * @param iterable<Node>|Node|null $nodes + * @param list<int|string>|null $path + * @param list<int|string>|null $unaliasedPath */ public static function createLocatedError($error, $nodes = null, ?array $path = null, ?array $unaliasedPath = null): Error { @@ -303,7 +303,7 @@ public function getExtensions(): ?array * @see http://php.net/manual/en/jsonserializable.jsonserialize.php * * @return array<string, mixed> data which can be serialized by <b>json_encode</b>, - * which is a value of any type other than a resource + * which is a value of any type other than a resource */ #[\ReturnTypeWillChange] public function jsonSerialize(): array diff --git a/src/Executor/ExecutionContext.php b/src/Executor/ExecutionContext.php index 2200876bc..75f799184 100644 --- a/src/Executor/ExecutionContext.php +++ b/src/Executor/ExecutionContext.php @@ -48,10 +48,10 @@ class ExecutionContext /** * @param array<string, FragmentDefinitionNode> $fragments - * @param mixed $rootValue - * @param mixed $contextValue - * @param array<string, mixed> $variableValues - * @param array<int, Error> $errors + * @param mixed $rootValue + * @param mixed $contextValue + * @param array<string, mixed> $variableValues + * @param array<int, Error> $errors * * @phpstan-param FieldResolver $fieldResolver */ diff --git a/src/Executor/ExecutionResult.php b/src/Executor/ExecutionResult.php index b0a9997ee..89acbce09 100644 --- a/src/Executor/ExecutionResult.php +++ b/src/Executor/ExecutionResult.php @@ -79,8 +79,8 @@ class ExecutionResult implements \JsonSerializable /** * @param array<string, mixed>|null $data - * @param array<Error> $errors - * @param array<string, mixed> $extensions + * @param array<Error> $errors + * @param array<string, mixed> $extensions */ public function __construct(?array $data = null, array $errors = [], array $extensions = []) { diff --git a/src/Executor/Executor.php b/src/Executor/Executor.php index fbd9933c7..95a66e001 100644 --- a/src/Executor/Executor.php +++ b/src/Executor/Executor.php @@ -86,8 +86,8 @@ public static function setImplementationFactory(callable $implementationFactory) * Always returns ExecutionResult and never throws. * All errors which occur during operation execution are collected in `$result->errors`. * - * @param mixed $rootValue - * @param mixed $contextValue + * @param mixed $rootValue + * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver @@ -127,8 +127,8 @@ public static function execute( * * Useful for async PHP platforms. * - * @param mixed $rootValue - * @param mixed $contextValue + * @param mixed $rootValue + * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver diff --git a/src/Executor/ReferenceExecutor.php b/src/Executor/ReferenceExecutor.php index baa0dd295..f86998c87 100644 --- a/src/Executor/ReferenceExecutor.php +++ b/src/Executor/ReferenceExecutor.php @@ -123,8 +123,8 @@ public function doExecute(): Promise * Constructs an ExecutionContext object from the arguments passed to * execute, which we will pass throughout the other execution methods. * - * @param mixed $rootValue - * @param mixed $contextValue + * @param mixed $rootValue + * @param mixed $contextValue * @param array<string, mixed> $rawVariableValues * * @phpstan-param FieldResolver $fieldResolver @@ -521,10 +521,10 @@ protected function doesFragmentConditionMatch(Node $fragment, ObjectType $type): /** * Implements the "Evaluating selection sets" section of the spec for "write" mode. * - * @param mixed $rootValue - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $contextValue + * @param mixed $rootValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $contextValue * * @phpstan-param Fields $fields * @@ -585,10 +585,10 @@ function ($results, $responseName) use ($contextValue, $path, $unaliasedPath, $p * by calling its resolve function, then calls completeValue to complete promises, * serialize scalars, or execute the sub-selection-set for objects. * - * @param mixed $rootValue - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $contextValue + * @param mixed $rootValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $contextValue * * @phpstan-param Path $path * @phpstan-param Path $unaliasedPath @@ -735,14 +735,14 @@ protected function resolveFieldValueOrError( * in the execution context. * * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $contextValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $contextValue * * @phpstan-param Path $path * @phpstan-param Path $unaliasedPath * - * @param mixed $result + * @param mixed $result * * @throws Error * @@ -785,10 +785,10 @@ protected function completeValueCatchingError( } /** - * @param mixed $rawError + * @param mixed $rawError * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath * * @throws Error */ @@ -834,10 +834,10 @@ protected function handleFieldError($rawError, \ArrayObject $fieldNodes, array $ * value by evaluating all sub-selections. * * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $result - * @param mixed $contextValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $result + * @param mixed $contextValue * * @throws \Throwable * @throws Error @@ -952,7 +952,7 @@ protected function getPromise($value): ?Promise * If the callback does not return a Promise, then this function will also not * return a Promise. * - * @param array<mixed> $values + * @param array<mixed> $values * @param Promise|mixed|null $initialValue * * @return Promise|mixed|null @@ -981,7 +981,7 @@ function ($previous, $value) use ($callback) { * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param iterable<mixed> $results - * @param mixed $contextValue + * @param mixed $contextValue * * @throws Error * @@ -1186,10 +1186,10 @@ protected function defaultTypeResolver($value, $contextValue, ResolveInfo $info, * Complete an Object value by executing all sub-selections. * * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $result - * @param mixed $contextValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $result + * @param mixed $contextValue * * @throws \Exception * @throws Error @@ -1253,7 +1253,7 @@ protected function completeObjectValue( /** * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param array<mixed> $result + * @param array<mixed> $result */ protected function invalidReturnTypeError( ObjectType $returnType, @@ -1270,10 +1270,10 @@ protected function invalidReturnTypeError( /** * @param \ArrayObject<int, FieldNode> $fieldNodes - * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $result - * @param mixed $contextValue + * @param list<string|int> $path + * @param list<string|int> $unaliasedPath + * @param mixed $result + * @param mixed $contextValue * * @throws \Exception * @throws Error @@ -1333,10 +1333,10 @@ protected function collectSubFields(ObjectType $returnType, \ArrayObject $fieldN /** * Implements the "Evaluating selection sets" section of the spec for "read" mode. * - * @param mixed $rootValue + * @param mixed $rootValue * @param list<string|int> $path - * @param list<string|int> $unaliasedPath - * @param mixed $contextValue + * @param list<string|int> $unaliasedPath + * @param mixed $contextValue * * @phpstan-param Fields $fields * diff --git a/src/GraphQL.php b/src/GraphQL.php index d6d97b59b..0da1e729b 100644 --- a/src/GraphQL.php +++ b/src/GraphQL.php @@ -70,10 +70,10 @@ class GraphQL * Empty array would allow to skip query validation (may be convenient for persisted * queries which are validated before persisting and assumed valid during execution) * - * @param string|DocumentNode $source - * @param mixed $rootValue - * @param mixed $contextValue - * @param array<string, mixed>|null $variableValues + * @param string|DocumentNode $source + * @param mixed $rootValue + * @param mixed $contextValue + * @param array<string, mixed>|null $variableValues * @param array<ValidationRule>|null $validationRules * * @api diff --git a/src/Language/AST/NodeList.php b/src/Language/AST/NodeList.php index f64060778..01071d476 100644 --- a/src/Language/AST/NodeList.php +++ b/src/Language/AST/NodeList.php @@ -56,7 +56,7 @@ public function offsetGet($offset): Node } /** - * @param int|string|null $offset + * @param int|string|null $offset * @param Node|array<string, mixed> $value * * @phpstan-param T|array<string, mixed> $value diff --git a/src/Type/Definition/ObjectType.php b/src/Type/Definition/ObjectType.php index 3f7ae0da3..dc4f3ee4e 100644 --- a/src/Type/Definition/ObjectType.php +++ b/src/Type/Definition/ObjectType.php @@ -117,7 +117,7 @@ public static function assertObjectType($type): self /** * @param mixed $objectValue The resolved value for the object type - * @param mixed $context The context that was passed to GraphQL::execute() + * @param mixed $context The context that was passed to GraphQL::execute() * * @return bool|Deferred|null */ diff --git a/src/Utils/BuildClientSchema.php b/src/Utils/BuildClientSchema.php index ed3ea6ab4..231702e40 100644 --- a/src/Utils/BuildClientSchema.php +++ b/src/Utils/BuildClientSchema.php @@ -60,7 +60,7 @@ class BuildClientSchema /** * @param array<string, mixed> $introspectionQuery - * @param array<string, bool> $options + * @param array<string, bool> $options * * @phpstan-param Options $options */ diff --git a/src/Utils/InterfaceImplementations.php b/src/Utils/InterfaceImplementations.php index bf59630f7..ea6118d98 100644 --- a/src/Utils/InterfaceImplementations.php +++ b/src/Utils/InterfaceImplementations.php @@ -19,7 +19,7 @@ class InterfaceImplementations private $interfaces; /** - * @param array<int, ObjectType> $objects + * @param array<int, ObjectType> $objects * @param array<int, InterfaceType> $interfaces */ public function __construct(array $objects, array $interfaces) diff --git a/src/Utils/MixedStore.php b/src/Utils/MixedStore.php index 0b01cdc9e..13e186476 100644 --- a/src/Utils/MixedStore.php +++ b/src/Utils/MixedStore.php @@ -147,7 +147,7 @@ public function offsetGet($offset) } /** - * @param mixed $offset + * @param mixed $offset * @param TValue $value * * @throws \InvalidArgumentException diff --git a/src/Utils/SchemaPrinter.php b/src/Utils/SchemaPrinter.php index 78cf0c486..a98485649 100644 --- a/src/Utils/SchemaPrinter.php +++ b/src/Utils/SchemaPrinter.php @@ -236,7 +236,7 @@ protected static function printDirective(Directive $directive, array $options): } /** - * @param array<string, bool> $options + * @param array<string, bool> $options * @param (Type&NamedType)|Directive|EnumValueDefinition|Argument|FieldDefinition|InputObjectField $def * * @throws \JsonException @@ -265,7 +265,7 @@ protected static function printDescription(array $options, $def, string $indenta } /** - * @param array<string, bool> $options + * @param array<string, bool> $options * @param array<int, Argument> $args * * @phpstan-param Options $options @@ -386,7 +386,7 @@ protected static function printObject(ObjectType $type, array $options): string } /** - * @param array<string, bool> $options + * @param array<string, bool> $options * @param ObjectType|InterfaceType $type * * @phpstan-param Options $options diff --git a/src/Utils/Value.php b/src/Utils/Value.php index 9a044e9c1..ce6545a3f 100644 --- a/src/Utils/Value.php +++ b/src/Utils/Value.php @@ -193,7 +193,7 @@ private static function ofValue($value): array } /** - * @param array<int, CoercionError> $errors + * @param array<int, CoercionError> $errors * @param CoercionError|array<int, CoercionError> $errorOrErrors * * @return array<int, CoercionError> diff --git a/src/Validator/Rules/VariablesInAllowedPosition.php b/src/Validator/Rules/VariablesInAllowedPosition.php index 9c9a95231..8411c3227 100644 --- a/src/Validator/Rules/VariablesInAllowedPosition.php +++ b/src/Validator/Rules/VariablesInAllowedPosition.php @@ -87,7 +87,7 @@ public static function badVarPosMessage(string $varName, string $varType, string * or the location at which it is located. * * @param ValueNode|null $varDefaultValue - * @param mixed $locationDefaultValue + * @param mixed $locationDefaultValue * * @throws InvariantViolation */ diff --git a/tests/Executor/ListsTest.php b/tests/Executor/ListsTest.php index 4a54f387f..22bd68964 100644 --- a/tests/Executor/ListsTest.php +++ b/tests/Executor/ListsTest.php @@ -47,7 +47,7 @@ public function testHandlesNullableListsWithArray(): void } /** - * @param mixed $testData + * @param mixed $testData * @param array<string, mixed> $expected * * @throws \Exception @@ -215,7 +215,7 @@ public function testHandlesNonNullableListsWithArray(): void } /** - * @param mixed $testData + * @param mixed $testData * @param array<string, mixed> $expected * * @throws \Exception @@ -351,7 +351,7 @@ public function testHandlesListOfNonNullsWithArray(): void } /** - * @param mixed $testData + * @param mixed $testData * @param array<string, mixed> $expected * * @throws \Exception @@ -496,7 +496,7 @@ public function testHandlesNonNullListOfNonNullsWithArray(): void } /** - * @param mixed $testData + * @param mixed $testData * @param array<string, mixed> $expected * * @throws \Exception diff --git a/tests/Executor/TestClasses/Person.php b/tests/Executor/TestClasses/Person.php index e78b6d04f..56f99eabe 100644 --- a/tests/Executor/TestClasses/Person.php +++ b/tests/Executor/TestClasses/Person.php @@ -7,17 +7,17 @@ final class Person /** @var string */ public $name; - /** @var (Dog|Cat)[]|null */ - public $pets; + /** @var array<Dog|Cat>|null */ + public ?array $pets; - /** @var (Dog|Cat|Person)[]|null */ - public $friends; + /** @var array<Dog|Cat|Person>|null */ + public ?array $friends; /** - * @param (Cat|Dog)[]|null $pets - * @param (Cat|Dog|Person)[]|null $friends + * @param array<Cat|Dog>|null $pets + * @param array<Cat|Dog|Person>|null $friends */ - public function __construct(string $name, $pets = null, $friends = null) + public function __construct(string $name, ?array $pets = null, ?array $friends = null) { $this->name = $name; $this->pets = $pets; diff --git a/tests/Language/ParserTest.php b/tests/Language/ParserTest.php index 44eae9378..f1d0a7f0c 100644 --- a/tests/Language/ParserTest.php +++ b/tests/Language/ParserTest.php @@ -64,9 +64,9 @@ public static function parseProvidesUsefulErrors(): iterable } /** - * @see it('parse provides useful errors') + * @see it('parse provides useful errors') * - * @param list<int> $expectedPositions + * @param list<int> $expectedPositions * @param list<SourceLocation> $expectedLocations * * @dataProvider parseProvidesUsefulErrors diff --git a/tests/Language/SchemaParserTest.php b/tests/Language/SchemaParserTest.php index b92467df3..62068ff3b 100644 --- a/tests/Language/SchemaParserTest.php +++ b/tests/Language/SchemaParserTest.php @@ -85,7 +85,7 @@ private function fieldNode(array $name, array $type, array $loc): array /** * @param array<string, mixed> $name * @param array<string, mixed> $type - * @param array<int, mixed> $args + * @param array<int, mixed> $args * * @phpstan-param LocationArray $loc * @@ -863,7 +863,7 @@ public function testSimpleFieldWithArg(): void /** * @param array<string, mixed> $name * @param array<string, mixed> $type - * @param mixed $defaultValue + * @param mixed $defaultValue * * @phpstan-param LocationArray $loc * diff --git a/tests/Server/QueryExecutionTest.php b/tests/Server/QueryExecutionTest.php index 2a3f28ec1..7ed698273 100644 --- a/tests/Server/QueryExecutionTest.php +++ b/tests/Server/QueryExecutionTest.php @@ -42,7 +42,7 @@ public function testSimpleQueryExecution(): void } /** - * @param array<string, mixed> $expected + * @param array<string, mixed> $expected * @param array<string, mixed>|null $variables * * @throws \Exception diff --git a/tests/Type/EnumTypeTest.php b/tests/Type/EnumTypeTest.php index f78948a02..919dfabff 100644 --- a/tests/Type/EnumTypeTest.php +++ b/tests/Type/EnumTypeTest.php @@ -290,7 +290,7 @@ public function testDoesNotAcceptStringLiterals(): void } /** - * @param array<string, mixed>|null $vars + * @param array<string, mixed>|null $vars * @param array{message: string, locations: array<int, SourceLocation>}|string $err * * @throws \Exception diff --git a/tests/Type/ResolveInfoTest.php b/tests/Type/ResolveInfoTest.php index a62033bfc..a8f1fb673 100644 --- a/tests/Type/ResolveInfoTest.php +++ b/tests/Type/ResolveInfoTest.php @@ -505,7 +505,7 @@ public function testPathAndUnaliasedPath(): void GRAPHQL )->toArray(); - self::assertEquals([ + self::assertSame([ 'data' => [ 'level1' => [ 'level2' => [ diff --git a/tests/Type/ValidationTest.php b/tests/Type/ValidationTest.php index 8796702af..d4d7cb3e5 100644 --- a/tests/Type/ValidationTest.php +++ b/tests/Type/ValidationTest.php @@ -354,7 +354,7 @@ private function formatErrors(array $errors, bool $withLocation = true): array } /** - * @param array<int, Error> $errors + * @param array<int, Error> $errors * @param array<int, array{message: string, locations?: array<int, array{line: int, column: int}>}> $expected */ private function assertMatchesValidationMessage(array $errors, array $expected): void diff --git a/tests/Utils/AstFromValueUntypedTest.php b/tests/Utils/AstFromValueUntypedTest.php index 56b4b5955..559176520 100644 --- a/tests/Utils/AstFromValueUntypedTest.php +++ b/tests/Utils/AstFromValueUntypedTest.php @@ -23,7 +23,7 @@ public function testParsesSimpleValues(): void } /** - * @param mixed $expected + * @param mixed $expected * @param array<string, mixed>|null $variables * * @throws \Exception diff --git a/tests/Utils/MixedStoreTest.php b/tests/Utils/MixedStoreTest.php index 723115dfc..8f48b038d 100644 --- a/tests/Utils/MixedStoreTest.php +++ b/tests/Utils/MixedStoreTest.php @@ -45,7 +45,7 @@ static function (): void {}, } /** - * @param mixed $key anything goes + * @param mixed $key anything goes * @param mixed $value anything goes * * @throws \InvalidArgumentException @@ -69,7 +69,7 @@ private function assertAcceptsKeyValue($key, $value): void } /** - * @param mixed $key anything goes + * @param mixed $key anything goes * @param mixed $value anything goes * * @throws \InvalidArgumentException diff --git a/tests/Utils/ValueFromAstTest.php b/tests/Utils/ValueFromAstTest.php index 1b9793183..306035bbf 100644 --- a/tests/Utils/ValueFromAstTest.php +++ b/tests/Utils/ValueFromAstTest.php @@ -190,7 +190,7 @@ public function testAcceptsVariableValuesAssumingAlreadyCoerced(): void /** * @param array<string, mixed> $variables - * @param mixed $expected any value + * @param mixed $expected any value * * @throws \Exception * @throws \JsonException diff --git a/tests/Validator/ValidatorTestCase.php b/tests/Validator/ValidatorTestCase.php index 11861df56..28e48d2ec 100644 --- a/tests/Validator/ValidatorTestCase.php +++ b/tests/Validator/ValidatorTestCase.php @@ -39,7 +39,7 @@ protected function expectPassesRule(ValidationRule $rule, string $queryString, a /** * @param array<ValidationRule> $rules - * @param array<string, mixed> $options + * @param array<string, mixed> $options * * @throws \Exception * @throws \JsonException @@ -426,7 +426,7 @@ public static function getTestSchema(): Schema /** * @param array<int, array<string, mixed>> $errors - * @param array<string, mixed> $options + * @param array<string, mixed> $options * * @throws \Exception * @throws \ReflectionException @@ -444,9 +444,9 @@ protected function expectFailsRule( } /** - * @param array<ValidationRule>|null $rules + * @param array<ValidationRule>|null $rules * @param array<int, array<string, mixed>> $expectedErrors - * @param array<string, mixed> $options + * @param array<string, mixed> $options * * @throws \Exception * @throws \JsonException