fkupper / psalm-laravel-collections
Stubs to let Psalm understand Laravel Collections better
Installs: 555
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 3
Forks: 3
Open Issues: 2
Language:Gherkin
Type:psalm-plugin
Requires
- php: ^7.2
- vimeo/psalm: dev-master
Requires (Dev)
- codeception/codeception: ^4.0
- laravel/framework: ^6.0
- squizlabs/php_codesniffer: ^3.3
- weirdan/codeception-psalm-module: ^0.8.0
This package is auto-updated.
Last update: 2024-10-23 16:31:23 UTC
README
A Laravel's \Illuminate\Support\Collection
plugin for Psalm (requires Psalm v3) to help you find errors in some cases where you use collections.
Installation:
$ composer require --dev fkupper/psalm-laravel-collections $ vendor/bin/psalm-plugin enable fkupper/psalm-laravel-collections
Examples
Accessing array with wrong key type
/** @var Collection<string,string> */ $c = new Collection(['a' => 'A', 'b' => 'B', 'c' => 'C']); $items = $c->all(); $items[1];
Adding an item of invalid type
/** @var Collection<int,string> */ $c = new Collection(["a", "b", "c"]); // items type is deinfed as string, cannot add int $c->add(1);
Asserting collection item value type
/** * @param Collection<string,\Exception> */ function(Collection $coll): void { $exception = $coll->first(); // psalm will report this typo $exception->getMassage(); } /** * @param Collection<int,string> */ function(Collection $coll): int { $value = $coll->first(); // psalm will remind you forgot to cast that $value to int return $value + 1; }
Better assertion of helper methods, like Collection::filter
/** * This function is using wrong types in the filter Closure params. * @param Collection<int,string> */ function(Collection $coll): void { $filteredValues = $coll->filter( // psalm will tell you that the Closure params are wrong function (bool $value, float $key): bool { return true; } ) } /** * @param Collection<int,string> */ function(Collection $coll): void { $filteredValues = $coll->filter( function (int $value, string $key): bool { return true; } ) // psalm understands that the result of the filter call // is a collection of same type as it was before, so the value // type is still string, therefore array cannot be added $filteredValues->add(['something']); }
Work In Progress
This is a work in progress project, therefore not all Collection methods have had their templates extended, or tested.
Please report any issues you may find, and even beetter, make a pull request with a fix!