diff --git a/composer.json b/composer.json index fb14e14..87c25ab 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "symfony/cache": "^7.0", "symfony/cache-contracts": "^3.5", "symfony/http-client": "^6.0 || ^7.0", - "thecodingmachine/safe": "^2.0", + "thecodingmachine/safe": "^2.0 || ^3.0", "webmozart/assert": "^1.11" }, "require-dev": { @@ -34,10 +34,10 @@ "ergebnis/php-cs-fixer-config": "^6.28", "ergebnis/test-util": "^1.5", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-webmozart-assert": "^2.0", "phpunit/phpunit": "^9.0", - "thecodingmachine/phpstan-safe-rule": "^1.0" + "thecodingmachine/phpstan-safe-rule": "^1.4" }, "config": { "sort-packages": true, diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 763d0bc..9858206 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -1,82 +1,110 @@ parameters: ignoreErrors: - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:assetResponse\\(\\) should return array\\{asset\\: array\\{filename\\: string, created_at\\: string, updated_at\\: string, expire_at\\: string\\|null, content_length\\: int, signed_url\\: string, content_type\\: string\\}\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Datasource\:\:\$dimensions \(list\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Datasource.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:datasourceDimensionResponse\\(\\) should return array\\{id\\: int, name\\: string, entry_value\\: string, datasource_id\\: int, created_at\\: string, updated_at\\: string\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Field\\FieldCollection\:\:\$items \(list\\) does not accept array\, Storyblok\\Api\\Domain\\Value\\Field\\Field\>\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Field/FieldCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:datasourceEntriesResponse\\(\\) should return array\\{datasource_entries\\: array\\\\} but returns array\\.$#" + message: '#^PHPDoc tag @return contains unresolvable type\.$#' + identifier: return.unresolvableType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Filter/FilterCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:datasourceEntryResponse\\(\\) should return array\\{id\\: int, name\\: string, value\\: string, dimension_value\\: string\\|null\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Filter\\FilterCollection\:\:\$items \(list\\) does not accept array\, Storyblok\\Api\\Domain\\Value\\Filter\\Filters\\Filter\>\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Filter/FilterCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:datasourceResponse\\(\\) should return array\\{id\\: int, name\\: string, slug\\: string, dimensions\\: array\\\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\IdCollection\:\:\$items \(list\\) does not accept array\, Storyblok\\Api\\Domain\\Value\\Id\>\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/IdCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:datasourcesResponse\\(\\) should return array\\{datasources\\: array\\\\>\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Link\:\:\$alternates \(list\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Link.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:linkAlternateResponse\\(\\) should return array\\{lang\\: string, name\\: string, path\\: string, published\\: bool, translated_slug\\: string\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Resolver\\RelationCollection\:\:\$items \(list\\) does not accept array\, Storyblok\\Api\\Domain\\Value\\Resolver\\Relation\>\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Resolver/RelationCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:linkResponse\\(\\) should return array\\{uuid\\: string, id\\: int, parent_id\\: int\\|null, name\\: string, slug\\: string, path\\: string, real_path\\: string, is_folder\\: bool, \\.\\.\\.\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Domain\\Value\\Tag\\TagCollection\:\:\$items \(list\\) does not accept array\, Storyblok\\Api\\Domain\\Value\\Tag\\Tag\>\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Domain/Value/Tag/TagCollection.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:linksResponse\\(\\) should return array\\{links\\: array\\\\>\\} but returns array\\.$#" + message: '#^Method Storyblok\\Api\\Request\\StoriesRequest\:\:toArray\(\) should return array\{language\: string, page\: int, per_page\: int, sort_by\?\: string, filter_query\?\: list\, with_tag\?\: string, excluding_fields\?\: string, excluding_ids\?\: string, \.\.\.\} but returns array\{language\: string, page\: int, per_page\: int, sort_by\?\: string, filter_query\?\: array, with_tag\?\: string, excluding_fields\?\: string, excluding_ids\?\: string, \.\.\.\}\.$#' + identifier: return.type count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Request/StoriesRequest.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:spaceResponse\\(\\) should return array\\{id\\: int, name\\: string, domain\\: string, version\\: int, language_codes\\: array\\\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Response\\DatasourceEntriesResponse\:\:\$datasourceEntries \(list\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Response/DatasourceEntriesResponse.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:storiesResponse\\(\\) should return array\\{cv\\: int, stories\\: array\\\\>, links\\: array\\, rels\\: array\\\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Response\\DatasourcesResponse\:\:\$datasources \(list\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Response/DatasourcesResponse.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:storyResponse\\(\\) should return array\\{cv\\: int, story\\: array\\, links\\: array\\, rels\\: array\\\\} but returns array\\.$#" + message: '#^Property Storyblok\\Api\\Response\\TagsResponse\:\:\$tags \(list\\) does not accept array\\.$#' + identifier: assign.propertyType count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: src/Response/TagsResponse.php - - message: "#^Method Storyblok\\\\Api\\\\Bridge\\\\Faker\\\\Provider\\\\StoryblokProvider\\:\\:tagsResponse\\(\\) should return array\\{tags\\: array\\\\} but returns array\\.$#" + message: '#^Cannot call method format\(\) on DateTimeImmutable\|null\.$#' + identifier: method.nonObject count: 1 - path: src/Bridge/Faker/Provider/StoryblokProvider.php + path: tests/Unit/Domain/Value/AssetTest.php - - message: "#^Method Storyblok\\\\Api\\\\Domain\\\\Value\\\\Filter\\\\FilterCollection\\:\\:toArray\\(\\) return type has no value type specified in iterable type array\\.$#" - count: 1 - path: src/Domain/Value/Filter/FilterCollection.php + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertEmpty\(\) with Storyblok\\Api\\Domain\\Value\\Field\\FieldCollection will always evaluate to false\.$#' + identifier: staticMethod.impossibleType + count: 2 + path: tests/Unit/Domain/Value/Field/FieldCollectionTest.php - - message: "#^PHPDoc tag @return contains unresolvable type\\.$#" - count: 1 - path: src/Domain/Value/Filter/FilterCollection.php + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertEmpty\(\) with Storyblok\\Api\\Domain\\Value\\Filter\\FilterCollection will always evaluate to false\.$#' + identifier: staticMethod.impossibleType + count: 2 + path: tests/Unit/Domain/Value/Filter/FilterCollectionTest.php - - message: "#^Cannot call method format\\(\\) on DateTimeImmutable\\|null\\.$#" - count: 1 - path: tests/Unit/Domain/Value/AssetTest.php + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertEmpty\(\) with Storyblok\\Api\\Domain\\Value\\IdCollection will always evaluate to false\.$#' + identifier: staticMethod.impossibleType + count: 2 + path: tests/Unit/Domain/Value/IdCollectionTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertEmpty\(\) with Storyblok\\Api\\Domain\\Value\\Resolver\\RelationCollection will always evaluate to false\.$#' + identifier: staticMethod.impossibleType + count: 2 + path: tests/Unit/Domain/Value/Resolver/RelationCollectionTest.php + + - + message: '#^Call to static method PHPUnit\\Framework\\Assert\:\:assertEmpty\(\) with Storyblok\\Api\\Domain\\Value\\Tag\\TagCollection will always evaluate to false\.$#' + identifier: staticMethod.impossibleType + count: 2 + path: tests/Unit/Domain/Value/Tag/TagCollectionTest.php diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 241484d..d229600 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -2,6 +2,11 @@ includes: - phpstan-baseline.neon parameters: + ignoreErrors: + - + identifier: missingType.iterableValue + - + identifier: staticMethod.alreadyNarrowedType inferPrivatePropertyTypeFromConstructor: true level: 8 paths: diff --git a/src/Domain/Value/Link.php b/src/Domain/Value/Link.php index a6aa708..a59886f 100644 --- a/src/Domain/Value/Link.php +++ b/src/Domain/Value/Link.php @@ -34,7 +34,7 @@ public bool $isPublished; /** - * @var list1 + * @var list */ public array $alternates; diff --git a/src/Domain/Value/Total.php b/src/Domain/Value/Total.php index dddc2bb..4beb307 100644 --- a/src/Domain/Value/Total.php +++ b/src/Domain/Value/Total.php @@ -27,7 +27,7 @@ public function __construct( } /** - * @param array> $headers + * @param array> $headers */ public static function fromHeaders(array $headers): self {