実験的 Validator プラグインです。PDT のエディタに「未定義(未初期化)変数を検出する」機能を追加します。
PDT の文法チェック機能は、最低限の Syntax Error しか検出しません。JDT などにある「未定義変数を検出する」とか「未定義関数を検出する」とか「実行されることが無いコードを検出する」とかいったチェック機能はありません。
この実験的 Validator プラグインは WST の Validation を実装することにより、編集中のファイル(のみ)に対してリアルタイムにコード解析を実行します。…ので、エディタのパフォーマンスを下げることは確実なわけで(^^;)。あくまでも実験的プラグインということで。現状は「タイピングによりコードが変化して Validator が呼び出されると、変化した部分ではなく全体のコードに対して解析を実行する」実装となっているため、劇的に遅いはずです。また、include は完全には対応していません。
動作環境
- Eclipse 3.3.2
- Web Standard Tools 2.0.3
- PDT 1.0.3
機能
↓の設定画面にある項目を検出します。ただし、現状この設定は検出するか否かではなく、検出したものを表示するか否かとして機能しています。すべてオフの場合に限り検出しない(コード解析を実行しない)ようになっています。なお、Preferences→General→Editors→Structured Text Editors→Appearance の「Report problems as you type」でもオンオフを制御できます。(ただし現在開かれているエディタに即座に反映はされません)




制約事項
たくさんありすぎて書ききれないのですが(^^;)- 未定義変数の検出に関して
- Includeファイル内で定義されている変数は検知できませんので、未定義変数として検出されてしまいます。
- 実行時の動作は考慮していませんので、正しくない結果を生じることがあります。例えば次のような場合、
<?php if (func() === true) { $x = 1; } $v = $x;func()の実行結果がtrueでないと$xは未定義になりますが、func()が何を返すかは不明なので、このケースでは検出できません。
- 未初期化変数の検出に関して
- 何か代入された時点で「初期化済み」となりますが、実行時の動作を考慮しているわけではないので、正しくない結果を生じることがあります。例えば次のような場合、
<?php global $g; if (func() === true) { $g = 1; } $v = $g;func()の実行結果がtrueでないと$gは未初期化のままですが、func()が何を返すかは不明なので、このケースでは検出できません。
- 何か代入された時点で「初期化済み」となりますが、実行時の動作を考慮しているわけではないので、正しくない結果を生じることがあります。例えば次のような場合、
- 未定義関数の検出に関して
- 変数による関数呼び出しは基本的に検出できませんが、下記のように関数名を直接代入している場合に限り検出します。
<?php $func = "foo"; $func();
- 変数による関数呼び出しは基本的に検出できませんが、下記のように関数名を直接代入している場合に限り検出します。
- 未定義メソッドの検出に関して
- 変数によるメソッド呼び出しは基本的に検出できませんが、下記のようにメソッド名を直接代入している場合に限り検出します。
<?php $method = "foo"; $obj->$method();
- オブジェクト変数のクラスは直前の「new クラス名」のみ判定しています。
- 変数によるメソッド呼び出しは基本的に検出できませんが、下記のようにメソッド名を直接代入している場合に限り検出します。
- 未定義クラスの検出に関して
- 変数によるクラスインスタンス生成は検出できません。
<?php $className = "Foo"; $obj = new $className;
- 変数によるクラスインスタンス生成は検出できません。
- その他
- includeは、ファイルが特定できるものを1レベルのみチェックしています。
ファイル
下記ファイルをダウンロードして plugins フォルダに突っ込んで下さい。(古いファイルがある場合は削除するか、または eclipse -clean でEclipseを起動して下さい)◇va000137.pdt.tools.validator_0.0.0.200809241500.jar (75KB)
2008/09/24