コールマップの変更¶
イントロ¶
ほとんどのコントリビューターが最初に着手することの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).