前記事で、どうやってコード補完しようか迷っているという話をしました。その後半日くらいでkenjiさんが方法をアップしてくれました。ありがとうございます。
Eclipse で FuelPHP のコード補完を行わせる冴えたやり方
空のクラスを作成する方法ですが、私が書いたuse文と違って、一箇所に書いておけばいいので実用性があります。
更に、実行時、実際に実行されるわけでありませんので、スピードにも影響しません。
残念ながら、NetBeansやPhpStormでは、このままでは動きませんでした。NetBeansでは抽象クラスをクラス宣言しただけでは、実装されていない関数がエラーになります。
さらに、PhpStormでは、インターフェイスもクラスで宣言したのではエラーになるようです。更に、インターフェイスと同時に例外も宣言しているファイルですと、インターフェイスとして拡張してもエラーになります。(もうちょっと、詳しく調べないと解決方法がわかりません。)
とりあえず、usegenフィルターを書き直しました。(今眠いので、これ以上考えられません。もうちょっと、汎用性を上げるように、書き加えます。)
php oil r usegen > 出力ファイルで実行してください。出力ファイルはcodecompletion.phpなど、適当にどうぞ。phpファイルにしてくださいね。
設置場所はプロフェクトのソースファイルの舌であれば、どこに置いてもNetBeansは見つけますので、大丈夫です。
もし、見える場所においておくのが、よろしく無いのでしたら、NetBeansのプロジェクト管理フォルダーのnbprojectに入れておきましょう。nbprojectはデフォルトでプロジェクトの大域インクルードパスになっています。nbproject下であれば、どこでも読み込まれます。
では、生成oilコマンドです。(追記:改訂版が出来ました。新しい記事をお読みください。)
<?php
namespace Fuel\Tasks;
class Usegen
{
public static function run()
{
echo '<?php'.PHP_EOL;
$dir = \File::read_dir(COREPATH.'classes');
self::print_re_define($dir, '');
}
private static function print_re_define($ary, $path)
{
foreach ($ary as $key => $val)
{
if (is_array($val))
{
self::print_re_define($val, $path.$key);
}
else
{
// コードを読む
try
{
$buff = \File::read(COREPATH.'classes\\'.$path.$val, true);
}
catch (\Fuel\Core\InvalidPathException $e)
{
die('読み込みエラー:'.$path.$val);
}
// バックスラッシュ区切りのパス名を_へ変換し、先頭を大文字へ
$dirs = explode("\\", $path);
$d = array();
foreach ($dirs as $i)
{
$d[] = ucfirst($i);
}
$cls_name = implode('_', $d).ucfirst(str_replace('.php', '', $val));
// 抽象クラスは、抽象クラスでないとNetBeansではエラーになる
// 更にインターフェイスは、インターフェイスでないとPhpStromでエラーになる。
if (preg_match('/[ \\t]*abstract[ \\t]+class[ \\t]+/', $buff) === 1)
{
echo 'abstract class '.$cls_name.' extends Fuel\\Core\\'.$cls_name.'{};'.PHP_EOL;
}
elseif (preg_match('/[ \\t]*interface[ \\t]+/', $buff) === 1)
{
echo 'interface '.$cls_name.' extends Fuel\\Core\\'.$cls_name.'{};'.PHP_EOL;
}
else
{
echo 'class '.$cls_name.' extends Fuel\\Core\\'.$cls_name.'{};'.PHP_EOL;
}
}
}
}
}
生成されたコード、こちらを設置してください。PhpStormではエラーになります。
<?php
interface Cache_Handler_Driver extends Fuel\Core\Cache_Handler_Driver{};
class Cache_Handler_Json extends Fuel\Core\Cache_Handler_Json{};
class Cache_Handler_Serialized extends Fuel\Core\Cache_Handler_Serialized{};
class Cache_Handler_String extends Fuel\Core\Cache_Handler_String{};
class Cache_Storage_Apc extends Fuel\Core\Cache_Storage_Apc{};
abstract class Cache_Storage_Driver extends Fuel\Core\Cache_Storage_Driver{};
class Cache_Storage_File extends Fuel\Core\Cache_Storage_File{};
class Cache_Storage_Memcached extends Fuel\Core\Cache_Storage_Memcached{};
class Cache_Storage_Redis extends Fuel\Core\Cache_Storage_Redis{};
abstract class Config_File extends Fuel\Core\Config_File{};
class Config_Ini extends Fuel\Core\Config_Ini{};
interface Config_Interface extends Fuel\Core\Config_Interface{};
class Config_Json extends Fuel\Core\Config_Json{};
class Config_Php extends Fuel\Core\Config_Php{};
class Config_Yml extends Fuel\Core\Config_Yml{};
abstract class Controller_Rest extends Fuel\Core\Controller_Rest{};
abstract class Controller_Template extends Fuel\Core\Controller_Template{};
class Database_Mysqli_Connection extends Fuel\Core\Database_Mysqli_Connection{};
class Database_Mysqli_Result extends Fuel\Core\Database_Mysqli_Result{};
class Database_Mysql_Connection extends Fuel\Core\Database_Mysql_Connection{};
class Database_Mysql_Result extends Fuel\Core\Database_Mysql_Result{};
class Database_Pdo_Connection extends Fuel\Core\Database_Pdo_Connection{};
class Database_Query_Builder_Delete extends Fuel\Core\Database_Query_Builder_Delete{};
class Database_Query_Builder_Insert extends Fuel\Core\Database_Query_Builder_Insert{};
class Database_Query_Builder_Join extends Fuel\Core\Database_Query_Builder_Join{};
class Database_Query_Builder_Select extends Fuel\Core\Database_Query_Builder_Select{};
class Database_Query_Builder_Update extends Fuel\Core\Database_Query_Builder_Update{};
abstract class Database_Query_Builder_Where extends Fuel\Core\Database_Query_Builder_Where{};
abstract class Database_Query_Builder extends Fuel\Core\Database_Query_Builder{};
class Database_Result_Cached extends Fuel\Core\Database_Result_Cached{};
abstract class Database_Connection extends Fuel\Core\Database_Connection{};
class Database_Exception extends Fuel\Core\Database_Exception{};
class Database_Expression extends Fuel\Core\Database_Expression{};
class Database_Query extends Fuel\Core\Database_Query{};
abstract class Database_Result extends Fuel\Core\Database_Result{};
class Database_Transaction extends Fuel\Core\Database_Transaction{};
class Fieldset_Field extends Fuel\Core\Fieldset_Field{};
class File_Handler_Directory extends Fuel\Core\File_Handler_Directory{};
class File_Handler_File extends Fuel\Core\File_Handler_File{};
class File_Area extends Fuel\Core\File_Area{};
abstract class Image_Driver extends Fuel\Core\Image_Driver{};
class Image_Gd extends Fuel\Core\Image_Gd{};
class Image_Imagemagick extends Fuel\Core\Image_Imagemagick{};
class Image_Imagick extends Fuel\Core\Image_Imagick{};
class Model_Crud extends Fuel\Core\Model_Crud{};
interface Mongo_Db extends Fuel\Core\Mongo_Db{};
class Request_Curl extends Fuel\Core\Request_Curl{};
abstract class Request_Driver extends Fuel\Core\Request_Driver{};
class Request_Soap extends Fuel\Core\Request_Soap{};
class Session_Cookie extends Fuel\Core\Session_Cookie{};
class Session_Db extends Fuel\Core\Session_Db{};
abstract class Session_Driver extends Fuel\Core\Session_Driver{};
class Session_Exception extends Fuel\Core\Session_Exception{};
class Session_File extends Fuel\Core\Session_File{};
class Session_Memcached extends Fuel\Core\Session_Memcached{};
class Session_Redis extends Fuel\Core\Session_Redis{};
class Validation_Error extends Fuel\Core\Validation_Error{};
class Agent extends Fuel\Core\Agent{};
class Arr extends Fuel\Core\Arr{};
class Asset extends Fuel\Core\Asset{};
class Autoloader extends Fuel\Core\Autoloader{};
class Cache extends Fuel\Core\Cache{};
class Cli extends Fuel\Core\Cli{};
class Config extends Fuel\Core\Config{};
abstract class Controller extends Fuel\Core\Controller{};
class Cookie extends Fuel\Core\Cookie{};
class Crypt extends Fuel\Core\Crypt{};
class Date extends Fuel\Core\Date{};
class Db extends Fuel\Core\Db{};
class Dbutil extends Fuel\Core\Dbutil{};
class Debug extends Fuel\Core\Debug{};
class Error extends Fuel\Core\Error{};
class Event extends Fuel\Core\Event{};
class Fieldset extends Fuel\Core\Fieldset{};
class File extends Fuel\Core\File{};
class Finder extends Fuel\Core\Finder{};
class Form extends Fuel\Core\Form{};
class Format extends Fuel\Core\Format{};
class Ftp extends Fuel\Core\Ftp{};
class Fuel extends Fuel\Core\Fuel{};
class Html extends Fuel\Core\Html{};
abstract class Httpexception extends Fuel\Core\Httpexception{};
class Image extends Fuel\Core\Image{};
class Inflector extends Fuel\Core\Inflector{};
class Input extends Fuel\Core\Input{};
class Lang extends Fuel\Core\Lang{};
class Log extends Fuel\Core\Log{};
class Markdown extends Fuel\Core\Markdown{};
class Migrate extends Fuel\Core\Migrate{};
class Model extends Fuel\Core\Model{};
class Num extends Fuel\Core\Num{};
class Package extends Fuel\Core\Package{};
class Pagination extends Fuel\Core\Pagination{};
class Profiler extends Fuel\Core\Profiler{};
interface Redis extends Fuel\Core\Redis{};
class Request extends Fuel\Core\Request{};
class Response extends Fuel\Core\Response{};
class Route extends Fuel\Core\Route{};
class Router extends Fuel\Core\Router{};
class Security extends Fuel\Core\Security{};
class Session extends Fuel\Core\Session{};
class Str extends Fuel\Core\Str{};
class Testcase extends Fuel\Core\Testcase{};
class Theme extends Fuel\Core\Theme{};
class Unzip extends Fuel\Core\Unzip{};
class Upload extends Fuel\Core\Upload{};
class Uri extends Fuel\Core\Uri{};
class Validation extends Fuel\Core\Validation{};
class View extends Fuel\Core\View{};
abstract class Viewmodel extends Fuel\Core\Viewmodel{};
| FuelPHP、コード補完用コード生成コード< 前 | 次 >コード補完とフレームワーク |
|---|
| < 前 | 次 > |
|---|