diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 5341bc9..b2ff8fc 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -3,15 +3,33 @@ name: checks on: - push +env: + COMPOSER_NO_INTERACTION: "1" + jobs: + format: + name: Code style + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: shivammathur/setup-php@v2 + with: + php-version: '8.4' + coverage: none + + - run: composer install --ansi --no-progress --prefer-dist + + - name: Run PHP_Codesniffer + run: vendor/bin/phpcs + static_analysis: name: Static analysis runs-on: ubuntu-latest - env: - COMPOSER_NO_INTERACTION: "1" - steps: - uses: actions/checkout@v4 @@ -50,9 +68,6 @@ jobs: runs-on: ${{ matrix.os }} - env: - COMPOSER_NO_INTERACTION: "1" - steps: - uses: actions/checkout@v4 diff --git a/composer.json b/composer.json index 304fbc2..691074e 100644 --- a/composer.json +++ b/composer.json @@ -17,6 +17,9 @@ } }, "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": false + }, "sort-packages": true }, "keywords": [ @@ -42,6 +45,7 @@ "phpunit/phpunit": "^12.1", "spaze/phpstan-disallowed-calls": "^4.5.0", "tracy/tracy": "^2.10.9", + "vojtech-dobes/php-codestyle": "~0.2.0", "vojtech-dobes/php-grammar-processing": "dev-master@dev", "vojtech-dobes/php-graphql-server": "dev-master@dev" }, diff --git a/composer.lock b/composer.lock index 1cd3a5c..efbe7a2 100644 --- a/composer.lock +++ b/composer.lock @@ -4,9 +4,87 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "ae327a4f793abad51c45e066374c7f89", + "content-hash": "8e1ffbb19b189072e2b380a323be4aec", "packages": [], "packages-dev": [ + { + "name": "dealerdirect/phpcodesniffer-composer-installer", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/composer-installer.git", + "reference": "4be43904336affa5c2f70744a348312336afd0da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", + "reference": "4be43904336affa5c2f70744a348312336afd0da", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + }, + "require-dev": { + "composer/composer": "*", + "ext-json": "*", + "ext-zip": "*", + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0", + "yoast/phpunit-polyfills": "^1.0" + }, + "type": "composer-plugin", + "extra": { + "class": "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin" + }, + "autoload": { + "psr-4": { + "PHPCSStandards\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Franck Nijhof", + "email": "franck.nijhof@dealerdirect.com", + "homepage": "http://www.frenck.nl", + "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/composer-installer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer Standards Composer Installer Plugin", + "homepage": "http://www.dealerdirect.com", + "keywords": [ + "PHPCodeSniffer", + "PHP_CodeSniffer", + "code quality", + "codesniffer", + "composer", + "installer", + "phpcbf", + "phpcs", + "plugin", + "qa", + "quality", + "standard", + "standards", + "style guide", + "stylecheck", + "tests" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "source": "https://github.com/PHPCSStandards/composer-installer" + }, + "time": "2023-01-05T11:28:13+00:00" + }, { "name": "guzzlehttp/promises", "version": "2.2.0", @@ -811,6 +889,53 @@ }, "time": "2024-03-27T12:14:49+00:00" }, + { + "name": "phpstan/phpdoc-parser", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^5.3.0", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", + "symfony/process": "^5.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "PHPStan\\PhpDocParser\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", + "support": { + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + }, + "time": "2025-02-19T13:28:12+00:00" + }, { "name": "phpstan/phpstan", "version": "2.1.17", @@ -2181,6 +2306,71 @@ ], "time": "2025-02-07T05:00:38+00:00" }, + { + "name": "slevomat/coding-standard", + "version": "8.19.0", + "source": { + "type": "git", + "url": "https://github.com/slevomat/coding-standard.git", + "reference": "9cc50509c3912d465a9f6898069f64cf2abf4e8a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/9cc50509c3912d465a9f6898069f64cf2abf4e8a", + "reference": "9cc50509c3912d465a9f6898069f64cf2abf4e8a", + "shasum": "" + }, + "require": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", + "php": "^7.4 || ^8.0", + "phpstan/phpdoc-parser": "^2.1.0", + "squizlabs/php_codesniffer": "^3.13.0" + }, + "require-dev": { + "phing/phing": "3.0.1", + "php-parallel-lint/php-parallel-lint": "1.4.0", + "phpstan/phpstan": "2.1.17", + "phpstan/phpstan-deprecation-rules": "2.0.3", + "phpstan/phpstan-phpunit": "2.0.6", + "phpstan/phpstan-strict-rules": "2.0.4", + "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.21|12.1.3" + }, + "type": "phpcodesniffer-standard", + "extra": { + "branch-alias": { + "dev-master": "8.x-dev" + } + }, + "autoload": { + "psr-4": { + "SlevomatCodingStandard\\": "SlevomatCodingStandard/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Slevomat Coding Standard for PHP_CodeSniffer complements Consistence Coding Standard by providing sniffs with additional checks.", + "keywords": [ + "dev", + "phpcs" + ], + "support": { + "issues": "https://github.com/slevomat/coding-standard/issues", + "source": "https://github.com/slevomat/coding-standard/tree/8.19.0" + }, + "funding": [ + { + "url": "https://github.com/kukulich", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/slevomat/coding-standard", + "type": "tidelift" + } + ], + "time": "2025-06-07T15:02:20+00:00" + }, { "name": "spaze/phpstan-disallowed-calls", "version": "v4.5.0", @@ -2248,6 +2438,90 @@ ], "time": "2025-04-10T19:01:43+00:00" }, + { + "name": "squizlabs/php_codesniffer", + "version": "3.13.0", + "source": { + "type": "git", + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "65ff2489553b83b4597e89c3b8b721487011d186" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/65ff2489553b83b4597e89c3b8b721487011d186", + "reference": "65ff2489553b83b4597e89c3b8b721487011d186", + "shasum": "" + }, + "require": { + "ext-simplexml": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": ">=5.4.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + }, + "bin": [ + "bin/phpcbf", + "bin/phpcs" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Greg Sherwood", + "role": "Former lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "Current lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" + } + ], + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "keywords": [ + "phpcs", + "standards", + "static analysis" + ], + "support": { + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" + }, + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + }, + { + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" + } + ], + "time": "2025-05-11T03:36:00+00:00" + }, { "name": "staabm/side-effects-detector", "version": "1.0.5", @@ -2425,6 +2699,41 @@ }, "time": "2025-04-28T14:35:15+00:00" }, + { + "name": "vojtech-dobes/php-codestyle", + "version": "0.2.0", + "source": { + "type": "git", + "url": "https://github.com/vojtech-dobes/php-codestyle.git", + "reference": "d59431f2d4cc36987b9eefba40b6bd8fddd4a440" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vojtech-dobes/php-codestyle/zipball/d59431f2d4cc36987b9eefba40b6bd8fddd4a440", + "reference": "d59431f2d4cc36987b9eefba40b6bd8fddd4a440", + "shasum": "" + }, + "require": { + "slevomat/coding-standard": "~8.19.0" + }, + "type": "phpcodesniffer-standard", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "keywords": [ + "code-style", + "codesniffer", + "coding-standard", + "dev", + "phpcs" + ], + "support": { + "issues": "https://github.com/vojtech-dobes/php-codestyle/issues", + "source": "https://github.com/vojtech-dobes/php-codestyle/tree/0.2.0" + }, + "time": "2025-06-09T07:30:13+00:00" + }, { "name": "vojtech-dobes/php-grammar-processing", "version": "dev-master", diff --git a/phpcs.xml.dist b/phpcs.xml.dist new file mode 100644 index 0000000..dbedded --- /dev/null +++ b/phpcs.xml.dist @@ -0,0 +1,10 @@ + + + + + src + tests + tests-shared + + + diff --git a/src/GraphQL/Config.php b/src/GraphQL/Config.php index 560eeeb..2ce10ec 100644 --- a/src/GraphQL/Config.php +++ b/src/GraphQL/Config.php @@ -27,7 +27,7 @@ static function ($schema): string { $schemaFile = realpath($schema); if ($schemaFile === false) { - throw new Exception("$schema doesn't exist"); + throw new Exception("{$schema} doesn't exist"); } return $schemaFile; diff --git a/src/GraphQL/CorrespondanceRule.php b/src/GraphQL/CorrespondanceRule.php index 2eaae10..7f935ec 100644 --- a/src/GraphQL/CorrespondanceRule.php +++ b/src/GraphQL/CorrespondanceRule.php @@ -1,4 +1,4 @@ -isSuperTypeOf($actualPhpType)->yes() === false) { $message = sprintf( - "Type of field %s should be %s but resolver %s returns %s", + 'Type of field %s should be %s but resolver %s returns %s', "{$objectType}.{$fieldName}", $expectedPhpType->describe(PHPStan\Type\VerbosityLevel::precise()), $resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()), @@ -206,7 +206,7 @@ private function listFieldResolvedValueTypes( $scope, $schemaServiceOraculum, $objectType, - [...$alreadyVisitedFields, "$objectType.$fieldName"], + [...$alreadyVisitedFields, "{$objectType}.{$fieldName}"], ); if ($resolverClassType->getClassName() === Vojtechdobes\GraphQL\ArrayFieldResolver::class) { @@ -215,7 +215,7 @@ private function listFieldResolvedValueTypes( foreach ($parentTypes as $parentType) { if ($parentType->isOffsetAccessible()->yes() === false) { $errors[] = sprintf( - "Resolver %s of field %s expects parent to have array access, but parent is resolved to %s", + 'Resolver %s of field %s expects parent to have array access, but parent is resolved to %s', $resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()), "{$objectType}.{$fieldName}", $parentType->describe(PHPStan\Type\VerbosityLevel::precise()), @@ -238,7 +238,7 @@ private function listFieldResolvedValueTypes( foreach ($parentTypes as $parentType) { if ($parentType->isObject()->yes() === false) { $errors[] = sprintf( - "Resolver %s of field %s expects parent to be an object, but parent is resolved to %s", + 'Resolver %s of field %s expects parent to be an object, but parent is resolved to %s', $resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()), "{$objectType}.{$fieldName}", $parentType->describe(PHPStan\Type\VerbosityLevel::precise()), @@ -263,7 +263,7 @@ private function listFieldResolvedValueTypes( foreach ($parentTypes as $parentType) { if ($parentType->isObject()->yes() === false) { $errors[] = sprintf( - "Resolver %s of field %s expects parent to be an object, but parent is resolved to %s", + 'Resolver %s of field %s expects parent to be an object, but parent is resolved to %s', $resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()), "{$objectType}.{$fieldName}", $parentType->describe(PHPStan\Type\VerbosityLevel::precise()), @@ -287,7 +287,7 @@ private function listFieldResolvedValueTypes( foreach ($parentTypes as $parentType) { if ($expectedParentType->isSuperTypeOf($parentType)->yes() === false) { $errors[] = sprintf( - "Resolver %s of field %s expects parent to be %s, but parent is resolved to %s", + 'Resolver %s of field %s expects parent to be %s, but parent is resolved to %s', $resolverClassType->describe(PHPStan\Type\VerbosityLevel::precise()), "{$objectType}.{$fieldName}", $expectedParentType->describe(PHPStan\Type\VerbosityLevel::precise()), @@ -368,7 +368,7 @@ private function stripAwayDeferred( { return PHPStan\Type\TypeTraverser::map( $type, - function (PHPStan\Type\Type $type, callable $traverse): PHPStan\Type\Type { + static function (PHPStan\Type\Type $type, callable $traverse): PHPStan\Type\Type { if ($type instanceof PHPStan\Type\Generic\GenericObjectType && $type->getClassName() === Vojtechdobes\GraphQL\Deferred::class) { return $type->getTemplateType(Vojtechdobes\GraphQL\Deferred::class, 'TValue'); } diff --git a/src/GraphQL/Helpers.php b/src/GraphQL/Helpers.php index a9d21ef..9264415 100644 --- a/src/GraphQL/Helpers.php +++ b/src/GraphQL/Helpers.php @@ -12,7 +12,7 @@ final class Helpers public static function createValidSchemaClassName(string $schemaName): string { return sprintf( - "GraphQLSchemaClass_%s", + 'GraphQLSchemaClass_%s', md5($schemaName), ); } @@ -22,7 +22,7 @@ public static function createValidSchemaClassName(string $schemaName): string public static function createInvalidSchemaClassName(string $schemaName): string { return sprintf( - "GraphQLSchemaClass_%s_Invalid", + 'GraphQLSchemaClass_%s_Invalid', md5($schemaName), ); } diff --git a/src/GraphQL/SchemaClassGenerator.php b/src/GraphQL/SchemaClassGenerator.php index 31c9c76..fab0fbb 100644 --- a/src/GraphQL/SchemaClassGenerator.php +++ b/src/GraphQL/SchemaClassGenerator.php @@ -1,9 +1,7 @@ -addClass($className); foreach ($schema->rootOperationTypes as $operation => $type) { - $class->addProperty(sprintf("root__%s__type", $operation)) + $class->addProperty(sprintf('root__%s__type', $operation)) ->setPublic() ->setValue($type); } @@ -147,7 +145,7 @@ private function generateValidSchemaClass( ->addComment('@var ' . sprintf( 'array{%s}', implode(', ', array_map( - fn ($argumentDefinition) => sprintf( + static fn ($argumentDefinition) => sprintf( '%s: %s', $argumentDefinition->name, self::getPhpType( @@ -173,7 +171,7 @@ private function generateValidSchemaClass( ->setValue($fields); foreach ($objectFields as $objectType => $fieldNames) { - $class->addProperty('objectType__' . $objectType .'__fields') + $class->addProperty('objectType__' . $objectType . '__fields') ->setPublic() ->setValue($fieldNames); } @@ -215,7 +213,7 @@ private static function getPhpNamedType( if ($typeDefinition instanceof Vojtechdobes\GraphQL\TypeSystem\ScalarTypeDefinition) { $scalarFormatter = $schema->scalarImplementationRegistry->getItem($typeDefinition->name); - $fieldType = '__GraphQL__Scalar<' . $scalarFormatter::class. '>'; + $fieldType = '__GraphQL__Scalar<' . $scalarFormatter::class . '>'; } elseif ($typeDefinition instanceof Vojtechdobes\GraphQL\TypeSystem\EnumTypeDefinition) { $enumClass = $schema->getEnumClass($typeDefinition->name); diff --git a/src/GraphQL/SchemaServiceOraculum.php b/src/GraphQL/SchemaServiceOraculum.php index 5da2d5b..8a04e29 100644 --- a/src/GraphQL/SchemaServiceOraculum.php +++ b/src/GraphQL/SchemaServiceOraculum.php @@ -90,7 +90,7 @@ public function getFieldPhpType(string $objectType, string $fieldName): PHPStan\ return $this->resolveEncodedPhpType( $this->schemaReflection ->getNativeProperty('field__' . $objectType . '_' . $fieldName . '__phpType') - ->getPhpDocType() + ->getPhpDocType(), ); } @@ -101,7 +101,7 @@ public function getFieldArgumentsType(string $objectType, string $fieldName): PH return $this->resolveEncodedPhpType( $this->schemaReflection ->getNativeProperty('field__' . $objectType . '_' . $fieldName . '__arguments') - ->getPhpDocType() + ->getPhpDocType(), ); } @@ -111,7 +111,7 @@ private function resolveEncodedPhpType(PHPStan\Type\Type $encodedType): PHPStan\ { return PHPStan\Type\TypeTraverser::map( $encodedType, - function (PHPStan\Type\Type $type, callable $traverse): PHPStan\Type\Type { + static function (PHPStan\Type\Type $type, callable $traverse): PHPStan\Type\Type { if ($type instanceof PHPStan\Type\Generic\GenericObjectType && $type->getClassName() === '__GraphQL__Scalar') { return $type ->getTypes()[0] diff --git a/tests-shared/AbstractCorrespondanceRuleTest.php b/tests-shared/AbstractCorrespondanceRuleTest.php index 5ee5c6a..aa20f76 100644 --- a/tests-shared/AbstractCorrespondanceRuleTest.php +++ b/tests-shared/AbstractCorrespondanceRuleTest.php @@ -1,4 +1,4 @@ -analyse([__DIR__ . '/DummyCollector.php'], [ [ - "Type of field Query.invalidStringResolvedAsBool should be string|null but resolver Vojtechdobes\TestsShared\Resolvers\QueryInvalidStringResolvedAsBoolFieldResolver returns bool", + 'Type of field Query.invalidStringResolvedAsBool should be string|null but resolver Vojtechdobes\TestsShared\Resolvers\QueryInvalidStringResolvedAsBoolFieldResolver returns bool', -1, ], [ @@ -41,23 +41,23 @@ final public function testRule(): void -1, ], [ - "Resolver Vojtechdobes\GraphQL\PropertyFieldResolver of field Query.rootFieldWithParentBasedResolver expects parent to be an object, but parent is resolved to null", + 'Resolver Vojtechdobes\GraphQL\PropertyFieldResolver of field Query.rootFieldWithParentBasedResolver expects parent to be an object, but parent is resolved to null', -1, ], [ - "Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to array{}", + 'Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to array{}', -1, ], [ - "Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Entity", + 'Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Entity', -1, ], [ - "Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Thing", + 'Resolver Vojtechdobes\TestsShared\Resolvers\PersonParentTypeNameFieldResolver of field PersonParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Person, but parent is resolved to Vojtechdobes\TestsShared\Resolvers\Thing', -1, ], [ - "Resolver Vojtechdobes\TestsShared\Resolvers\EntityParentTypeNameFieldResolver of field EntityParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Entity, but parent is resolved to array{}", + 'Resolver Vojtechdobes\TestsShared\Resolvers\EntityParentTypeNameFieldResolver of field EntityParentType.name expects parent to be Vojtechdobes\TestsShared\Resolvers\Entity, but parent is resolved to array{}', -1, ], ]); diff --git a/tests-shared/DummyCollector.php b/tests-shared/DummyCollector.php index b32563d..b9b7ac9 100644 --- a/tests-shared/DummyCollector.php +++ b/tests-shared/DummyCollector.php @@ -1,9 +1,9 @@ -