Php Inspections (EA Extended)とPhp Inspections (EA Ultimate)はPhpStormのInspection(コード検査)機能をさらに強力なものに拡張してくれるプラグインです。無償で使えるのがEA Extendedで、それに更に検査ルールを加えたハイエンドの有償版がEA Ultimateです。
本稿では、そのEA Extended 3.0.9(11月30日リリース)、EA Ultimate 2.0.10(12月3日リリース)に追加された新たなチェックツールを紹介します。
EA Extended/EA Ultimate共通の新機能
重複した配列のキー(Duplicate array keys)
配列定義で重複したキーを報告します。配列宣言に同じキーを使用した複数の要素がある場合、最後のものだけが使用され、他のすべての要素は上書きされてしまうからです。
疑わしいバイナリオペレーション(Suspicious binary operations)
この検査は様々なケースについて報告します。例えば、traitに対するinstanceof
演算子の使用。これは常にfalse
が返ります。
代入するつもりなのに、比較演算子==
が使われている場合。
誤って同じ変数同士を比較している場合。常にtrue
になるバグです。
演算子の評価順の関係上、常にtrue
になってしまう式。
EA Ultimate限定の新機能
不要な空のチェック(Unnecessary emptiness check)
isset(...)
とempty(...)
の問題点とより単純な書き方を報告します。
コンストラクタはインターフェイスに依存しよう(Interfaces as constructor dependencies)
コンストラクタに注入されるオブジェクトの型がインターフェイスでない場合に報告します。次の例は、Connection
インターフェイスがあるのに、具象クラスのMySqlConnection
を注入しています。テスタビリティを考えると、具象よりもインターフェイスに依存したほうがいいはずです。
なお、インターフェイスを実装していない具象クラスの注入は無視するオプションもあります。
テストしずらいAPI(Testing unfriendly APIs)
設定したしきい値を超えてモックをたくさん持っているテストケースについて報告します。複雑なモッキングは、設計の筋の悪さや単体テストの学習コストの増加、テストの保守性の低下などの問題があることの現れです。モックがnew
で暗黙的に作られる場合や、setConstructorArgs([...])
で呼び出されるものはカウントされません。