Skip to content

Psalmについて

Psalmは、プログラムを深く掘り下げ、できるだけ多くの型関連のバグを見つけようとする静的解析ツールです。

他の類似ツールよりも進んでいる機能がいくつかあります:

  • 混合型の警告
    Psalmが式の型を推論できない場合、mixedというプレースホルダー型を使用します。mixed型は時にバグを隠してしまうことがあるため、これらを追跡することで多くの一般的な落とし穴を避けるのに役立ちます。

  • インテリジェントなロジックチェック
    Psalmはコードに関する論理的な主張を追跡するため、if ($a && $a) {}if ($a && !$a) {}はどちらも問題として扱われます。また、以前のコードパスで行われた論理的な主張も追跡するため、if ($a) {} elseif ($a) {}のような問題を防ぎます。

  • プロパティ初期化チェック
    Psalmは、コンストラクタが呼び出された後、与えられたオブジェクトのすべてのプロパティに値が設定されているかをチェックします。

  • 汚染分析
    Psalmはコード内のセキュリティ脆弱性を検出できます。

  • 言語サーバー
    PsalmにはさまざまなIDEと互換性のある言語サーバーがあります。

  • 自動修正
    Psalmは検出した多くの問題を自動的に修正できます。

  • 自動リファクタリング
    Psalmはコマンドラインから簡単なリファクタリングを実行することもできます。

出力例

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)

インスピレーション

Psalmには主に2つのインスピレーションがあります:

  • EtsyのPhan。これはnikicのphp-ast拡張を使用して抽象構文木を作成します。
  • FacebookのHack。これはPHPに似た言語で、多くの高度な型付け機能をネイティブにサポートしているため、docblockが不要です。

目次

ユーザーノート