コールマップの変更¶
イントロ¶
ほとんどのコントリビューターが最初に着手することの1つは、コールマップの 変更を提案することである。
コールマップとは、関数/メソッドがどのような引数を取り、何を返すかをPsalmに伝えるデータファイル(配列を返すPHPファイルとしてフォーマットされる)です。
には2つの完全なコールマップ (CallMap.php とCallMap_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).