vimeo/psalm
Psalm is a powerful PHP static analysis tool that finds type errors and bugs before runtime. Install via Composer, configure for your codebase, and run it locally or try the live demo at psalm.dev. Docs and integrations available for teams and CI.
Psalm is a static analysis tool that attempts to dig into your program and find as many type-related bugs as possible.
It has a few features that go further than other similar tools:
Mixed type warnings
If Psalm cannot infer a type for an expression then it uses a mixed placeholder type. mixed types can sometimes mask bugs, so keeping track of them helps you avoid a number of common pitfalls.
Intelligent logic checks
Psalm keeps track of logical assertions made about your code, so if ($a && $a) {} and if ($a && !$a) {} are both treated as issues. Psalm also keeps track of logical assertions made in prior code paths, preventing issues like if ($a) {} elseif ($a) {}.
Property initialisation checks Psalm checks that all properties of a given object have values after the constructor is called.
Taint analysis Psalm can detect security vulnerabilities in your code.
Language Server Psalm has a Language Server that’s compatible with a range of different IDEs.
Automatic fixes Psalm can fix many of the issues it finds automatically.
Automatic refactoring Psalm can also perform simple refactors from the command line.
Given a file implode_strings.php:
<?php
$a = ['foo', 'bar'];
echo implode($a, ' ');
> ./vendor/bin/psalm implode_strings.php
ERROR: InvalidArgument - somefile.php:3:14 - Argument 1 of implode expects `string`, `array` provided (see https://psalm.dev/004)
There are two main inspirations for Psalm:
How can I help you explore Laravel packages today?