…#107) (#121)
* Setup the hook callback rule and test.
* Add the wp-hooks library.
* Start adding tests.
* Preparing more tests.
* If we don't have enough arguments, bail out and let PHPStan handle the error.
* If the callback is not valid, bail out and let PHPStan handle the error:
* Simplify this.
* More valid test cases.
* Update some test line numbers.
* First pass at detecting mismatching accepted and expected argument counts.
* Remove some accidental duplicates.
* Fix some logic.
* Let's split this up before it gets out of hand.
* Reduce this down.
* More tidying up.
* We're going to be needing this in multiple methods soon.
* Prep for callback return type checking, not yet functional.
* Split action return type assertion into its own method.
* Bring this message more inline with those used by PHPStan.
* Add detection for filter callbacks with no return value.
* Don't need this just yet.
* Use early exit to reduce code nesting.
* Remove unused imports.
* Yoda comparisons are disallowed.
* Coding standards.
* Remove unused code.
* Use early return to reduce code nesting.
* Remove more unused code.
* Renaming.
* Use early return to reduce code nesting.
* Tidying up.
* Correct logic introduced during refactoring.
* Exclude "maybe" callables.
* More handling for parameter counts.
* More handling for optional parameters in hook callbacks.
* Make the tests more manageable.
* Tests for more callback types.
* Tidying up.
* This isn't used.
* More test cases.
* Tests for variadic callbacks.
* More specific handling for variadic callbacks.
* More tests.
* The hooks names are not relevant to the tests.
* Remove an `else`.
* I'm still not entirely sure why this works, but it does. Props @herndlm.
* Another test for an action with a return value.
* More variadic handling.
* Turns out PHPStan handles typed and untyped functions differently.
* Partly broken callbacks will trigger an error in PHPStan so we don't need to handle them.
* Terminology.
* Refactoring.
* PHP 7.2 compatibility.
* Reorder the processing so the return type is checked first.
* More tests.
Co-authored-by: Viktor Szépe <viktor@szepe.net>
Co-authored-by: John Blackbourn <john@humanmade.com>