お久しぶりです、パッションの伝道師こと鰯です。
今回は、弊社でも採用しているPHPの統合開発環境である、PHPStormの補完機能について、ちょっと便利なTIPSを紹介したいと思います。

世のWebプログラマは、きっとVimやEmacs比率が多いかと思いますが、導入の敷居の低さ、機能の充実では PHPStorm も十分、現場で使えるしろものかと思います。

では、さっそく表題のPHPのExtensionの関数補完についてですが、PHPStormは標準で実装されている関数やクラスについては、当然のごとく補完ができるようになっているのですが、extensionといった任意で追加するものについては、補完がされません。

以前から、どうにかならんかなと思っていたのですが、今回、Google先生にお尋ねしてみると、こんなものを発見。
WI-174 PHP stubs are incomplete or differ from online docs / adding completion for custom extensions or libraries
という事で、さっそく試してみました。手順は以下のようになります。

今回は Yaml extension の補完を追加したかったので Yaml のみを対象にしていますが、他のものも同様に同じ手順で可能と思います。 なお、PHPStormのVersionはv6で、Mac環境で作業しています。

PHPStorm.app用のstubファイル作成

PHPのオンラインドキュメントのソースを取得

svn co https://svn.php.net/repository/phpdoc/modules/doc-en phpdoc

Stub作成用のプログラムをbitbucketから取得 Issueにあったプログラムは、クライアントマシンのパスがリテラルで書かれてて、すぐに動かなかったので、少し修正して、オプションで指定できるように変更してあります。

※プログラムを動かすと Notice が大量に出るので無視してます stubs/ の中に作成されたphpファイルがあると思いますが、これは、実行したphpに含まれるextensionだけが対象になっているようで、すべてのextensionは生成されませんので、必要に応じて、extensionを追加するか、または、プログラムの改修をしてください。

PhpStorm.app の stub が含まれるパッケージを更新する

実は、生成された stub ファイルだけでは正常に補完できません、というか、正確には補完はされるが、関数のデフォルト値に関しての情報が抜けているので、すべての引数が必須の状態になっているので、引数を省略すると警告が… ここからは手作業になってしまうのですが、それぞれの関数の引数について、デフォルト値を手作業で追加していきます。

BEFORE

function yaml_parse($input, $pos, $ndocs, $callbacks) {}

AFTER

function yaml_parse($input, $pos = 0, &$ndocs = null, array $callbacks = null) {}

こんな感じに、デフォルト値の定義を追加していきます… 今回は、YAML extensionが対象だったので、関数5つで済んだので良いんですが、関数が多かったりするものは、ちょっと…(きっと、デフォルト値までstub化してくれる方がどこかにいる事を願って…)
ちなみに、修正済みの yaml 用のstubはここに置いておきます。

git clone git@bitbucket.org:iwai/phpstorm-stubs.git

修正が完了したら、再度、パッケージ化してPHPStormのjarを上書きして完了です。 (バックアップは取っておいた方が良いですよ)

さっそく、yamlのstubが入った、PHPStormを起動してみましょう、 PHPStormでYaml関数補完 まあ、何ということでしょう、あの、補完もきかず警告の出ていた関数が、匠の技によって、PHPStorm の標準機能のように動作してるではありませんか。
ということで、いかがでしたでしょうか、素敵なPHPStormライフを!

あわせて読みたい記事