Skip to content

コールマップの変更

イントロ

ほとんどのコントリビューターが最初に着手することの1つは、コールマップの 変更を提案することである。

コールマップとは、関数/メソッドがどのような引数を取り、何を返すかをPsalmに伝えるデータファイル(配列を返すPHPファイルとしてフォーマットされる)です。

には2つの完全なコールマップ (CallMap.phpCallMap_historical.php) があります。 dictionaries フォルダにあります。 CallMap_historical 。 シグネチャは PHP 7.0 のもので、CallMap.php には現在のシグネチャが含まれています。 (執筆時のPHP 8.1用)が含まれています。

完全なコールマップ形式

完全なコールマップ (CallMap.php およびCallMap_historical.php) は、関数/メソッド名をキーとし、 対応するシグネチャを表す配列を値とします。 の名前をキーとし、対応するシグネチャを表す配列を値とします。

その値の最初の要素はリターン・タイプで(これもキーを持たない)、それ以降の要素は関数/メソッドのパラメータを表す。 以降の要素は関数/メソッドのパラメータを表します。パラメータ名 オプションのパラメータ名は、= で後置されます。

デルタファイル形式

デルタファイル(名前 CallMap_<PHP major version><PHP minor version>_delta.php) は、対応する PHP のバージョンで発生した変更をリストアップします。以下の3つのセクションがあります。 added (その PHP バージョンで追加された関数/メソッド)、 (その PHP バージョンで削除された関数/メソッド) (その PHP バージョンで追加された関数/メソッド)、removed (削除された関数/メソッド)、 そして changed.

removed およびadded セクションのエントリーの書式は完全なコールマップの書式と同じですが、changed のエントリーはold およびnew のシグネチャを列挙しています。

Psalmによるデルタファイルの使用方法

現在のPHPのバージョンが、Psalmがサポートする最新のPHPのバージョン 以外に設定されている場合、解析時に使用されるコールマップのバージョンに 合致するために、差分ファイルを処理する必要がある。Psalmは、そのために以下のプロセスを使用します:

1.CallMap.php (注:最新のシグネチャを持つもの)を読み込む。2.設定されているPHPのバージョンと一致すれば、それを使用する。3.以前のPHPバージョンのcallmap deltaがあれば、それを読む。4.以前のコールマップ差分を逆順に適用する。つまり、removed セクションのエントリが追加され、added セクションのエントリが削除される。 changed.new 現在のcallampのシグネチャを changed.old. 5.2.

一貫した歴史

デルタとコールマップにミスマッチがないことを確認するために、CIはすべての関数/メソッドエントリが一貫した履歴を持つことを検証する。例えば、changed.new のシグネチャがCallMap.php のシグネチャと一致すること、removed のエントリが実際にはCallMap.php に存在しないことなどである。

典型的な変更

実用的な観点から、典型的なコールマップの変更をいくつか見てみよう。

新しい関数の追加

PHP 8.1 で追加された関数があるとします。例えばarray_is_list() 。に追加します。 CallMap_81_delta.php (PHP8.1で導入されたので)、そしてCallMap.php (最新のPHPバージョンに存在するので)。 に追加します。)以下はthe PR that does it

関数のシグネチャの修正

間違ったシグネチャを見つけたとしましょう。 現在Psalmにあるものとは常に異なっていた。これにはCallMap_historical.php CallMap.php (に変更する必要があります。 への変更が必要です。)以下はthe PR that does it

関数の署名が古いバージョンでは正しいが、その後変更された場合は を編集する必要があります。 CallMap.php を編集する必要があります (この新しいシグネチャはまだ有効です)。 以下は the PR that does it (makes timestamp nullable).

ユーザーノート