ナビゲーションの機能を以前から改善しないといけないとは思っていたのですが、要望もなさそうだったので放置していました(たとえば、renderメソッドでアクション名と異なるViewを使用している場合)。ごめんなさい、ごめんなさい。。。
PhpStormのプラグインが作成され、ナビゲーションの機能がたくさんあり、いずれ同様の機能をつけて欲しいという要望がでるのではないかと思いましたので対応してみました。(正確には対応中。。。)
今回は作成中のものをテストしていただけたらなーと思いましたが、DLしても使い方がわからなければ意味がないので、このエントリを書いています。
環境
- NetBeans 7.3+
- CakePHP 2.x
- CakePHP 1.x (動かない部分もあるかもしれません。。。)
使い方
アクションを呼び出す方法は3通りあります。
- エディタ内でショートカットを実行
- エディタツールバーから実行 (現在SmartとTestのみ)
- コンテキストメニューから実行 (現在SmartとTestのみ)
ショートカット
追記:US配列のキーボードだと問題があるので、このショートカットは[Ctrl + : (COLON)] [*]から[Ctrl + Shift + G)] [*]に変更します。
パターンは
[Ctrl + Shift + G] [*] (もしくは[Ctrl + J] [*] )
です。これを使いたくなければキーマップから変更して下さい。
- [Ctrl + Shift + G] [T] TestCaseへのジャンプ
- [Ctrl + Shift + G] [F] Fixture
- [Ctrl + Shift + G] [M] Model
- [Ctrl + Shift + G] [C] Controller
- [Ctrl + Shift + G] [V] View
- [Ctrl + Shift + G] [H] Helper
- [Ctrl + Shift + G] [P] Component
- [Ctrl + Shift + G] [B] Behavior
- [Ctrl + Shift + G] [S] Smart Go To
エディターツールバーメニュー
コンテキストメニュー
右クリック > CakePHP > CakePHP Smart Go To
遷移マトリックス
それぞれのアクションは以下の表の様に対応します。丸は遷移可能。★と?はどうしようかなーと思ってるところです。
?は全てのモデルファイルやテストファイルで使われている部分を検索することも可能ですが、ファイル数が多くなると処理に時間がかかるので、今のところ未実装です。
★の M->Cは同名のコントローラを探します、無ければ全てのコントローラから使われているものを探します。Smart機能では同名のコントローラのみさがします。
★の F->Mは同名のもののみ探します。
キャレットポジション
キャレットポジションには意味があり、アクションメソッド内だったり、element()のViewパス内だったりすると、それを考慮して、ファイルを遷移(または候補を表示)します。
例えば、テストケースの候補を出す場合は、下のイメージのようになります。
sampleメソッド内だと、テストケースのメソッド名にsampleが含まれるものがリストに表示されます。
メソッドの外部で実行すると、全てのメソッドの候補が表示されます。[]がついてないものについては、ファイルを開いている場合は表示中のキャレットポジションへ、開いていな場合はファイルの先頭へ移動します。
このようにした理由は、編集途中でファイルを遷移し、戻った時にファイルの先頭や、メソッドの先頭に移動するとまたそこから編集途中の場所に移動しなければならないからです。
Smart Go To
自動で候補を表示する機能です。何を候補にいれるか検討中です。。。例えば、コントローラだったらViewの候補を表示します。
Go to *
それぞれのファイルの候補を表示します。
Controller ファイルからの遷移
- もし$themeがあれば、Themeファイルも候補に表示されます。(メソッド内に$this->theme = ‘MyTheme’ があればそのThemeファイルも候補に表示されます。)
- $this->view = ‘add’;があればadd.ctpを候補に追加します。
- $this->render()があればそこで指定したファイルも候補に表示します。
- ClassRegistry::init(‘ModelClass’)があれば候補にModelClassを追加します。(M->Mも同じです。)
View ファイルからの遷移
- V -> Vへの移動は$this->element(), $this->extend()を考慮します。
Fixture ファイルからの遷移
- $tableがあればテーブル名からモデル名へ変換しそのモデルへ移動します。
Controller, Helper, Behaviorへの移動
- Coreのものは候補に表示されません。
- エイリアス指定している場合は実体を候補に表示します。
スクリーンキャスト
[youtube]http://youtu.be/QQi9YTKw2Mg[/youtube]
テスト用NBM
- https://bitbucket.org/junichi11/cakephp-netbeans/downloads (org-cakephp-netbeans-0.8.8.2-for-testing-issue38.nbm)
もしテストしていただける方がいればとても助かります。要望通りになるかどうかはわかりませんが、こうした方がいいというのや問題があれば、twitterやgithub等でお知らせ下さい。
追記:最後に
@nojimageさんに、試用していただき、いくつか問題点や改善案をご指摘いただきました。ありがとうございました!公開する前に試用していただけると、(思い違いやチェックもれ、使いにくいなどを改善できるので)とても助かります。