1
0
mirror of https://github.com/danog/psalm.git synced 2024-11-30 04:39:00 +01:00
psalm/docs
2019-05-16 14:17:40 -04:00
..
authoring_plugins.md Add support for absolute plugin paths. 2019-05-05 16:44:36 -04:00
checking_non_php_files.md Add more docs to source control 2018-02-17 19:53:17 -05:00
configuration.md Added default name 2019-05-16 14:17:40 -04:00
dealing_with_code_issues.md Add section on using a baseline 2019-01-03 08:58:54 -05:00
docblock_type_syntax.md Document intersection and no-return types in docblock syntax 2019-05-15 19:16:15 -04:00
fixing_code.md Add documentation for unused method/property removal/ 2019-04-20 17:54:17 -04:00
how_psalm_works.md Change DependencyFinderVisitor name to ReflectorVisitor and update docs 2018-11-13 14:09:43 -05:00
installation.md Add follow on from installation 2019-03-19 12:08:22 -04:00
issues.md Add separate issue for undefined classes in docblocks 2019-05-15 18:41:26 -04:00
language_server.md Added new LSP features. 2019-01-25 11:32:17 -05:00
plugins_type_system.md Few small improvements 2019-04-14 15:12:16 -04:00
README.md Split up plugins guide 2019-04-14 15:21:41 -04:00
running_psalm.md Fix XML node name in the docs 2019-02-12 17:47:02 -05:00
supported_annotations.md Fix typo in docs 2019-05-14 19:30:39 -04:00
templated_annotations.md Update docs/templated_annotations.md 2019-02-11 18:39:19 -05:00
typing_in_psalm.md Add link for docblock type syntax 2019-03-19 17:12:35 -04:00
using_plugins.md Link to human-readable package list 2019-04-21 08:42:35 -04: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. Any mixed type is a sign of an insufficiently-documented codebase. You can configure Psalm warn when encountering mixed types by adding totallyTyped="true" attribute to your XML config file.

  • 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.

  • Support for complicated array shapes
    Psalm has support for object-like arrays, allowing you to specify types for all keys of an array if you so wish.

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

  • Multi-threaded mode
    Using the --threads=[X] command line option will run Psalm's analysis stage on [X] threads. 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