{{toc}} ※Windows2000のSP1では、リストがきちんと表示されませんでした。SP2ではきちんと動作します した。
概要
入力を支援するために、入力を補完する機能です。入力補完機能は2種類あります。静的入力補完と、動的入力補完です。
静的入力補完
静的入力補完は、[AutoComplete Data Path]フォルダの下の、[クラス名].datが入力候補となります。 ロジックは単純で、"."が押された直前の文字列(例えば"a")を
a = [クラス名].new
の条件で前方検索して、クラス名を取得し、同名のファイルを[AutoComplete Data Path]フォルダ下から探します。 またString、Regexp、Array、Hashは
a = "hoge" a = /^hoge/ a = [1,2,3] a = {1=>'hoge', 2=>'gege'}
という宣言にも対応しています。
また、0.9.6.0から現在編集中のファイルから入力補完データのファイルを作成することができるようになりました(EasyParse)。その時作成されるデータファイルは、[AutoComplete Data Path]/rde_tmpフォルダに保存されます。このデータファイルは、[Ruby]-[Clear TempData]で削除することができます。
動的入力補完
動的入力補完は、最初の文字を数文字入力して[Ctrl] + [Space]で起動します。
同一コードウィンドウ内から同じ文字で始まる文字列を検索して、入力候補とします。
最初に前方検索して該当するものがあれば、それを入力候補とします。該当するものがなければ、後方にも検索して、入力候補を探します。 [Options]で、SearchAllにチェックがしてあれば、頭からファイル全部に対して検索を行い、入力候補を作成します。
例)
editor1 edit2 edior3
と入力しておいて、
ed
とだけ入力して、[Ctrl] + [Space]を押します。
静的入力補完データ
rde_var_table.dat
rde_var_table.datに組み込み変数とクラス名の対応を記述したファイルを置けます。
- 書式
[variable]\t[class]
*.dat
- .datにファイル名のクラスのメソッドを記述します。
- 書式
[insert data]\t[label data]\t[flag]
となっていて、[flag]は、1ビット目が、singleton_method、2ビット目がinstance_methodとなっています。3ビット目が定数
今回は、そこまでやる余力はないですが、表示用データは、Rubyのレファレンスマニュアルから、引数とかのデータを使えれば、よりいいかなと思ったりしてます。 このファイルの作成については、こちらもご覧下さい。
現在編集中ファイルの入力補完
下のコードを入力して、[Ruby]-[EasyParse(F12)]してみてください。
class A def m1 "here in m1" end def m2 "here in m2" end end def m3(a, b) if (a == b) "equal" else "different" end end
つづいて、
a =
と入力して CodeWindow 右クリックメニュー内[ShowObjects(Ctrl+J)] とすると、クラスAが選択できます。
a = A.new a.
また入力してm1,m2が入力候補に入っていることを確認してください。 また、べたの場所で
m
だけ入力して [Ruby]-[ShowMethods(Ctrl+.)]すると、 m3が補完候補で表示されます。 とこんな感じです。 また、Objectのプライベートメソッドも入力補完できるようになってます。
att req pri
などでそれぞれ、[Ruby]-[ShowMethods(Ctrl+.)]してみると、
attr_reader require print
の入力も楽できます
簡易解析のロジック
簡易解析のロジックについて説明します。 簡易解析が実行されると現在編集中のファイルを先頭からなめていきます。色分けの結果と、キーワードを頼りに意味のありそうな行と定数をピックアップしていきます。
def|undef|require|include|private|protected|public|alias|module_function|attr_reader|attr_writer|attr_accessor
こうして、意味ありそうな行と定数だけを抜き出した一時ファイルを作成して、その後ろにrde_parse_template.rbの内容をくっつけて実行すると、入力補完データフォルダ内rde_temp下に入力補完のためのデータファイルが作成されます。
毎行実行できれば理想ですが、都度rubyを立ち上げ実行しているため、速度はマシンに依存します。
たとえば、GUIオブジェクトのメソッドや定数を拾うのには役に立つように思います。下の#1#2#3でそれぞれEasyParseすると、ShowMethodsで定数入力に楽ができます。また、素地でShowMethodsすることで、定数一覧もみれるので便利です。
require 'phi' include Phi # 1 class MainForm < Form # 2 def initialize @btn = Button.new self # 3 @btn.caption= "test" @btn.align= AL_BOTTOM @btn.on_click=Proc.new{close} end end a = MainForm.new a.caption= "test form" a.show_modal
変数のクラス・モジュール型手動登録
ARGF.each{|line|
と入力したとき、lineの補完を実現したいとします。 lineがStringであることをユーザが知っていることが前提ですが、この時、最初にlineを入力するときに
line.
と入力したあとで、ShowObjects(Ctrl+J)でオブジェクトリストを表示して
String
の何文字かを入力するなどしてリスト内でStringを選択させ、→キーを押してメソッド表示に切り換えます。
この切り換えたタイミングで、RDEがコードウィンドウごとに持つ変数バッファに、lineは、Stringであることが記録されます。 rde_var_table.datに
line String
を一時的に加えたのと同じことになります。
これで、lineでも補完がおこなわれるようになりました。こうして登録した内容は、[Ruby]-[VarTableEditor]で編集することができます。この記録は、コードウィンドウが閉じられるもしくは、RubyFountainが切り換えられると一緒に消えます。