LoginSignup
8
8

More than 5 years have passed since last update.

Eclipse PDT で入力補完が効かないときの最後の手段

Posted at

はじめに

Eclipse といえば IDE なので当然メソッド名などの入力補完が可能です、改めて言うことでは無いですが。

@return などの DocComment を書いておけば、それを元に候補を出してくれます。

<?php
class Hoge
{
    public function get() {}
}

/**
 * @return Hoge
 */
function func() {}

// 入力補完が効く
func()->get();

DocComment を書いていなくても文脈からある程度察してくれます。

<?php
function nodoc()
{
    return new Hoge();
}

// DocComment がなくても入力補完が効く
nodoc()->get();

ところで最近知ったのですが、次のようにすればオブジェクトの配列でも入力補完させられます。これは便利!

<?php
/**
 * @return Hoge[]
 */
function returnArray() {}


foreach ($a as $x)
{
    // 入力補完が効く
    $x->get();
}

もちろん、配列の場合でも文脈からある程度察してくれます。かしこい!

<?php
function nodocArray()
{
    return array(new Hoge);
}


foreach (nodocArray() as $x)
{
    // 入力補完が効く
    $x->get();
}

ただ、DocComment や 文脈からでは入力補完させられない場合もあります。例えば次のような場合です。

<?php
$class = 'Hoge';
$o = new $class();

他にもリフレクションから newInstance したり、DI や ServiceLocator を使ってると入力補完を効かせられないケースがてんこ盛りです。

そんなときはブロックコメントで @var と変数名とクラス名を書いてやれば OK です。

<?php
$class = 'Hoge';

/* @var $o Hoge */
$o = new $class();

// 入力補完が効くようになった!
$o->get();

本題

Eclipse は色々と頑張って入力補完してくれるのですが、頑張りすぎなのか、もしくは私の書き方がなにかおかしいのか、たまに @var しても入力補完が効かないことがあります。

そんなときに使う最後の手段がこれ。

<?php
$o instanceof Hoge;
$o->get();

instanceof するとほぼ間違いなく入力補完を効かせることができます。

唐突に意味のない instanceof が出てくるのはちょっと気持ち悪いですが・・・テストコードとかならいいよね!

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8