Laravel4、シンプルなコード補完コード

タグ: Laravel4   NetBeans  

Laravel4にはIDEやエディター向きの補完コードが先を争って発表されています。

私はNetBeansユーザーで、既にNetBeansで動作すると言われているコード補完コードを使ってみましたが、動作しません。多分、NetBeansのオプション設定も関係しているのでしょう。

そして何より、面倒です。どうして面倒な事が好きなんでしょうね。

仕方がないので、結局自分で補完コード生成コードを作成しました。動作確認はNetBeansです。ですが、他のIDEやエディターに合わせ、改良するのも簡単です。とても単純なコードです。

routes.phpに付け加え、設定したルートにアクセスしてください。このコードの場合'/ccc'にアクセスすれば、生成コードが表示されます。お好きな場所へphpコードとして保存してください。

/*
 * 製作者:Hirohisa Kawase
 * このプログラムの権利は放棄します。商業利用/非営利にかかわらず、自由に改変/配布可能です。
 * 製作者の名前を残す必要もありません。ライセンスを付け加えることも可能です。
 * 権利放棄日時:2013-05-30 日本時間
 */
Route::get( '/ccc', function()
    {
        $aliasLoader = AliasLoader::getInstance();

        $aliases = $aliasLoader->getAliases();

        $outputLines = '<?php<br>';

        foreach( $aliases as $key => $fullNamespaceNotInUse )
        {
            $reflectionClass = new ReflectionClass( $key );

            if( $reflectionClass->hasMethod( 'getFacadeRoot' ) )
            {
                $instance = $key::getFacadeRoot();

                $reflectionClass = new ReflectionClass( $instance );
            }

            if( $reflectionClass->isInstantiable() )
            {
                $name = 'class '.$key.' extends '.$reflectionClass->getName().'{}';
            }
            elseif( $reflectionClass->isAbstract() )
            {
                $name = 'abstract class '.$key.' extends '.$reflectionClass->getName().' {}';
            }
            else
            {
                $name = '// not sure about '.$key.' Class';
            }

            $outputLines .= $name.'<br>';
        }
        return $outputLines;
    } );

やっぱり、コード補完はあるとないとじゃ雲泥の差ですね。便利だ。

修正

自動では100%上手く行きません。生成結果は多少自分で変更したほうが便利です。生成結果はドライバーの設定を反映しているものがあるため、自分の環境で生成したコードをもとに変更をかけたほうが良いでしょう。

以下は修正箇所の例です。

// Guardクラスが良い
class Auth extends Illuminate\Auth\Guard{}

// Builderクラスが良い
class DB extends Illuminate\Database\Database\Query\Builder{}

// Factoryにはmakeが含まれているが、チェックの関数は含まれていない
class Validator extends Illuminate\Validation\Factory{
    public function passes();
    public function fails();
}