psalm
https://github.com/vimeo/psalm
PHP
A static analysis tool for finding errors in PHP applications
Triage Issues!
When you volunteer to triage issues, you'll receive an email each day with a link to an open issue that needs help in this project. You'll also receive instructions on how to triage issues.
Triage Docs!
Receive a documented method or class from your favorite GitHub repos in your inbox every day. If you're really pro, receive undocumented methods or classes and supercharge your commit history.
PHP not yet supported17 Subscribers
Add a CodeTriage badge to psalm
Help out
- Issues
- PossiblyNullPropertyFetch false positive: boolean flag stops narrowing a variable redeclared by @var after an unrelated if
- `static` in `@method` parameter types is never resolved to the called class
- class-string<T> parameter accepts any class-string when the receiver's T is a function template
- Box<Y> accepted as Box<object> at return (template invariance not checked)
- `value-of<A>` and `key-of<A>` with a function template A bounded by an array shape are not resolved through the bound
- Closure returning null accepted for callable(): T when T is a function template
- Closure parameter inferred from Closure(properties-of<T>) on a concrete Holder<Model> stays unexpanded and triggers InvalidArgument
- False ArgumentTypeCoercion "expects CFinal, but parent type CBase&static provided" when a final receiver gets $this as an unconstrained template argument
- InvalidArgument for a closure with a `self` param in a trait, passed to a `Closure(static)` param (expects Closure(One), provided Closure(static))
- Untyped closure param of `callable(static)` on another instance is inferred as `Base&static` (the caller's late static class)
- Docs
- PHP not yet supported