Eclipse で CodeIgniter のコード補完を行わせる冴えたやり方
以前の記事 Eclipse で CodeIgniter 2.0 のコード補完 ですが、Eclipse(PDT) をバージョンアップしたためか、動作しなくなっていました。
コード補完できるコードを生成するコントローラを変更し、別の方法でやってみました。
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Eclipse extends CI_Controller { function __construct() { parent::__construct(); } function index() { $lines = array(); // libraries $_ci_varmap = array('loader' => 'load', 'unit_test' => 'unit', 'user_agent' => 'agent'); $_skip = array( 'codeigniter', 'common', 'controller', 'driver', 'exceptions', 'hooks', 'model', 'profiler', 'router'); $libraries = array_merge(glob(BASEPATH . 'core/*.php'), glob(BASEPATH . 'libraries/*.php')); foreach ($libraries as $filename) { $class = basename($filename, '.php'); $class_var = strtolower($class); if (in_array($class_var, $_skip)) { continue; } $class_name = 'CI_' . $class; $class_var = ( ! isset($_ci_varmap[$class_var])) ? $class_var : $_ci_varmap[$class_var]; $lines[] = "/**\n" . "* @var $class_name\n" . "*/\n" . "var $$class_var;\n"; } // database $lines[] = "/**\n" . "* @var CI_DB_active_record\n" . "*/\n" . "var \$db;\n"; // models foreach (glob(APPPATH . 'models/*.php') as $filename) { $class = ucfirst(basename($filename, '.php')); $class_var = $class; $class_name = $class; $lines[] = "/**\n" . "* @var $class_name\n" . "*/\n" . "var $$class_var;\n"; } sort($lines); echo 'Put the codes below in system/core/Controller.php, Model.php' . "\n"; echo '<pre>' ."\n"; echo '// for Eclipse auto completion' . "\n"; foreach ($lines as $line) { echo $line; } echo '</pre>' ."\n"; } } /* End of file eclipse.php */ /* Location: ./application/controllers/eclipse.php */
これを実行すると、CI_Controller および CI_Model クラスに追加するコードが出力されます。
CodeIgniter 2.0 では CLI からの実行も可能です。
$ php index.php eclipse
とすると、以下のように出力されます。
Put the codes below in system/core/Controller.php, Model.php <pre> // for Eclipse auto completion /** * @var CI_Benchmark */ var $benchmark; /** * @var CI_Calendar */ var $calendar; /** * @var CI_Cart */ var $cart; /** * @var CI_Config */ var $config; /** * @var CI_DB_active_record */ var $db; /** * @var CI_Email */ var $email; /** * @var CI_Encrypt */ var $encrypt; /** * @var CI_Form_validation */ var $form_validation; /** * @var CI_Ftp */ var $ftp; /** * @var CI_Image_lib */ var $image_lib; /** * @var CI_Input */ var $input; /** * @var CI_Javascript */ var $javascript; /** * @var CI_Lang */ var $lang; /** * @var CI_Loader */ var $load; /** * @var CI_Log */ var $log; /** * @var CI_Output */ var $output; /** * @var CI_Pagination */ var $pagination; /** * @var CI_Parser */ var $parser; /** * @var CI_Security */ var $security; /** * @var CI_Session */ var $session; /** * @var CI_Sha1 */ var $sha1; /** * @var CI_Table */ var $table; /** * @var CI_Trackback */ var $trackback; /** * @var CI_Typography */ var $typography; /** * @var CI_URI */ var $uri; /** * @var CI_Unit_test */ var $unit; /** * @var CI_Upload */ var $upload; /** * @var CI_User_agent */ var $agent; /** * @var CI_Utf8 */ var $utf8; /** * @var CI_Xmlrpc */ var $xmlrpc; /** * @var CI_Xmlrpcs */ var $xmlrpcs; /** * @var CI_Zip */ var $zip; </pre>
このコードを CI_Controller クラスと CI_Model クラスの定義の中に追加します。
現在の CodeIgniter Reactor の tip だと、以下のようになります。要するに、各クラスのプロパティとそれに対してのコメントを記述するわけです。
--- a/system/core/Controller.php Wed Apr 20 16:03:04 2011 -0500 +++ b/system/core/Controller.php Thu Apr 21 13:52:35 2011 +0900 @@ -28,6 +28,135 @@ * @link http://codeigniter.com/user_guide/general/controllers.html */ class CI_Controller { +// for Eclipse auto completion +/** +* @var CI_Benchmark +*/ +var $benchmark; +/** +* @var CI_Calendar +*/ +var $calendar; +/** +* @var CI_Cart +*/ +var $cart; +/** +* @var CI_Config +*/ +var $config; +/** +* @var CI_DB_active_record +*/ +var $db; +/** +* @var CI_Email +*/ +var $email; +/** +* @var CI_Encrypt +*/ +var $encrypt; +/** +* @var CI_Form_validation +*/ +var $form_validation; +/** +* @var CI_Ftp +*/ +var $ftp; +/** +* @var CI_Image_lib +*/ +var $image_lib; +/** +* @var CI_Input +*/ +var $input; +/** +* @var CI_Javascript +*/ +var $javascript; +/** +* @var CI_Lang +*/ +var $lang; +/** +* @var CI_Loader +*/ +var $load; +/** +* @var CI_Log +*/ +var $log; +/** +* @var CI_Output +*/ +var $output; +/** +* @var CI_Pagination +*/ +var $pagination; +/** +* @var CI_Parser +*/ +var $parser; +/** +* @var CI_Security +*/ +var $security; +/** +* @var CI_Session +*/ +var $session; +/** +* @var CI_Sha1 +*/ +var $sha1; +/** +* @var CI_Table +*/ +var $table; +/** +* @var CI_Trackback +*/ +var $trackback; +/** +* @var CI_Typography +*/ +var $typography; +/** +* @var CI_URI +*/ +var $uri; +/** +* @var CI_Unit_test +*/ +var $unit; +/** +* @var CI_Upload +*/ +var $upload; +/** +* @var CI_User_agent +*/ +var $agent; +/** +* @var CI_Utf8 +*/ +var $utf8; +/** +* @var CI_Xmlrpc +*/ +var $xmlrpc; +/** +* @var CI_Xmlrpcs +*/ +var $xmlrpcs; +/** +* @var CI_Zip +*/ +var $zip; private static $instance;
--- a/system/core/Model.php Wed Apr 20 16:03:04 2011 -0500 +++ b/system/core/Model.php Thu Apr 21 13:52:35 2011 +0900 @@ -25,6 +25,135 @@ * @link http://codeigniter.com/user_guide/libraries/config.html */ class CI_Model { +// for Eclipse auto completion +/** +* @var CI_Benchmark +*/ +var $benchmark; +/** +* @var CI_Calendar +*/ +var $calendar; +/** +* @var CI_Cart +*/ +var $cart; +/** +* @var CI_Config +*/ +var $config; +/** +* @var CI_DB_active_record +*/ +var $db; +/** +* @var CI_Email +*/ +var $email; +/** +* @var CI_Encrypt +*/ +var $encrypt; +/** +* @var CI_Form_validation +*/ +var $form_validation; +/** +* @var CI_Ftp +*/ +var $ftp; +/** +* @var CI_Image_lib +*/ +var $image_lib; +/** +* @var CI_Input +*/ +var $input; +/** +* @var CI_Javascript +*/ +var $javascript; +/** +* @var CI_Lang +*/ +var $lang; +/** +* @var CI_Loader +*/ +var $load; +/** +* @var CI_Log +*/ +var $log; +/** +* @var CI_Output +*/ +var $output; +/** +* @var CI_Pagination +*/ +var $pagination; +/** +* @var CI_Parser +*/ +var $parser; +/** +* @var CI_Security +*/ +var $security; +/** +* @var CI_Session +*/ +var $session; +/** +* @var CI_Sha1 +*/ +var $sha1; +/** +* @var CI_Table +*/ +var $table; +/** +* @var CI_Trackback +*/ +var $trackback; +/** +* @var CI_Typography +*/ +var $typography; +/** +* @var CI_URI +*/ +var $uri; +/** +* @var CI_Unit_test +*/ +var $unit; +/** +* @var CI_Upload +*/ +var $upload; +/** +* @var CI_User_agent +*/ +var $agent; +/** +* @var CI_Utf8 +*/ +var $utf8; +/** +* @var CI_Xmlrpc +*/ +var $xmlrpc; +/** +* @var CI_Xmlrpcs +*/ +var $xmlrpcs; +/** +* @var CI_Zip +*/ +var $zip; /** * Constructor
これで、準備完了です。