1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-30 04:39:00 +01:00
psalm/docs
Philip Hofstetter d315822bfa make skipping of checks after invalid includes configurable
as suggested in the PR it's best to make the setting configurable.

In order not to break existing installations, we default to keeping the
old behaviour, but in a later version of psalm, we might change the
default.
2020-02-27 18:49:23 -05:00
..
annotating_code Add line break 2020-02-23 00:41:19 -05:00
manipulating_code Fix #2173 - remove @var annotations automatically 2019-09-26 15:08:05 -04:00
running_psalm make skipping of checks after invalid includes configurable 2020-02-27 18:49:23 -05:00
how_psalm_works.md Change DependencyFinderVisitor name to ReflectorVisitor and update docs 2018-11-13 14:09:43 -05:00
README.md Update readme 2020-02-18 23:50:53 -05:00
what_makes_psalm_complicated.md stripping trailing whitespace 2019-02-11 18:39:19 -05:00

About Psalm

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.

Psalm also has a few features to make it perform as well as possible on large codebases:

  • Multi-threaded mode
    Whereever possible Psalm will run its analysis in parallel to save time. Useful for large codebases, it has a massive impact on performance.

  • Incremental checks
    When using the --diff command line option, Psalm will only analyse files that have changed and files that reference them.

Example output

// somefile.php
<?php
$a = ['foo', 'bar'];
echo implode($a, ' ');
> ./vendor/bin/psalm somefile.php
ERROR: InvalidArgument - somefile.php:3:14 - Argument 1 of implode expects `string`, `array` provided

Inspirations

There are two main inspirations for Psalm:

  • Etsy's Phan, which uses nikic's php-ast extension to create an abstract syntax tree
  • Facebook's Hack, a PHP-like language that supports many advanced typing features natively, so docblocks aren't necessary.

Index