promise
promise copied to clipboard
[1.x] Add basic template annotations
This adds basic type safety annotations for static analyzers like PHPStan and Psalm. This will cover around 80% of the use cases and a follow-up PR for all supported versions will be proposed later to get it to a 100% of close to a 100%.
By adding these annotations methods returning a promise can hint their resolving type by adding @return PromiseInterface<bool>
when they for example resolve to a boolean. By doing that Psalm and PHPStan will understand that the following bit of code will not become an issue because the method's contract promised a boolean through the promise:
$promise->then(static function (bool $isEnabled) {});
However, the following will yield errors:
$promise->then(static function (string $isEnabled) {});
This PR is a requirement for https://github.com/reactphp/async/pull/40