fix: drop invalid generic params from JsonApiResourceCollection return types#83
Open
alies-dev wants to merge 1 commit into
Open
Conversation
…n types JsonApiResourceCollection extends Illuminate's AnonymousResourceCollection, which declares no @template params, so JsonApiResourceCollection is non-generic (0 template params). The `@return JsonApiResourceCollection<int, mixed>` on collection() and newCollection() therefore supplies 2 type args to a class that accepts none. PHPStan (with larastan's generic resource stubs) tolerated this, but Psalm via psalm-plugin-laravel reports: TooManyTemplateParams: TiMacDonald\JsonApi\JsonApiResourceCollection<int, mixed> has too many template params, expecting 0 Drop the generic args so the annotation matches the class's actual arity.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
JsonApiResourceCollectionextends Illuminate'sAnonymousResourceCollection, which declares no@templateparams, soJsonApiResourceCollectionis non-generic (0 template params). The@return JsonApiResourceCollection<int, mixed>annotations oncollection()andnewCollection()supply 2 type args to a class that accepts none.PHPStan (with larastan's generic resource stubs) tolerates this, but Psalm via
psalm-plugin-laravelreports against any consumer that calls::collection():Still present in latest
v1.0.0-beta.12and onmainHEAD.Fix
Drop the generic args (
src/JsonApiResource.php:154,167) so the annotation matches the class's actual arity. Laravel'sAnonymousResourceCollection/ResourceCollectionare non-generic, so the bare type is correct; this does not enable any new PHPStan generics check (config does not setcheckGenericClassInNonGenericObjectType), so removing the args cannot introduce a PHPStan error.