るびきちです。

rcodetools 0.8.0をリリースしました。
告知が遅くなってすみません。

rcodetools は Ruby のコードを扱うツール群です。
rcodetools には xmpfilter とエディタに依存しない開発支援ツールが含まれています。
Emacs と Vim のインターフェースも用意しています。

* xmpfilter: Test::Unit assert* / RSpec should* 自動生成、コード注釈
* rct-complete: 高精度メソッド名・クラス名・定数名等補完
* rct-doc: ドキュメント参照・コードナビゲーター
* rct-meth-args: 高精度メソッド情報リスト、TAGS ファイル作成
* rct-fork: Rails 等重いライブラリを予めロードし、補完を高速化する(サーバ)
* rct-fork-client: rct-fork サーバが保持する状態から Ruby スクリプトを実行する
* ruby-toggle-file: テストスクリプトと実装スクリプトを切り換える
* rbtest: 小規模スクリプトのための埋め込み Test::Unit

「gem install rcodetools」でインストールできます。
http://eigenclass.org/hiki.rb?rcodetools



0.7.0([ruby-list:43652])からの変更点は以下の通りです。

* Ruby 1.9対応!
* xmpfilter: ppを使った複数行注釈
* 「xmpfilter --expectations」でexpectationsのテストを生成
* anything-rcodetools.elを追加:anything.elで補完
* xmpfilterに「--tmpfile」オプションを追加
* rcodetools.el: xmpfilter-command関数がより賢くなった
* rcodetools.el: M-x rct-forkが使えるようになった
* rct-fork: より安定した
* rct-fork: rubygemsをデフォルトでロードするようになった

== Ruby 1.9対応

ついにRuby 1.9に対応しました。xmpfilter/rct-complete/rct-docで「-S」オ
プションを指定すると、Rubyインタプリタを指定することができます。
例えば、以下のファイル(version.rb)をruby19で注釈するには、
「xmpfiler -S ruby19 version.rb」を実行します。

$ cat version,rb
RUBY_VERSION                    # =>
$ xmpfilter -S ruby19 version.rb
RUBY_VERSION                    # => "1.9.0"

簡単にRubyインタプリタを切り換えられるので、バージョンごとの動作比較が
やりやすくなります。

== 複数行注釈

通常は「# =>」の後にinspectメソッドの結果を注釈していますが、巨大な配列
などを注釈すると行が長くなって見辛くなってしまいます。そこで、注釈した
い式の次の行頭(インデント可能)に「# =>」を置くと、pretty_inspectメソッ
ドでわかりやすく注釈されます。

a = [ 11111111111111112222222222222233333333333,
  "test array",
  [ :foo, :bar, :baz, :fobar],
]
if true
  a
  # =>
  1 + 3
  # =>
end

↓ (xmpfilter)

a = [ 11111111111111112222222222222233333333333,
  "test array",
  [ :foo, :bar, :baz, :fobar],
]
if true
  a
  # => [11111111111111112222222222222233333333333,
  #     "test array",
  #     [:foo, :bar, :baz, :fobar]]
  1 + 3
  # => 4
end

== expectationsテスティングフレームワークによるテスト自動生成

xmpfilterに「--expectations」オプションをつけると、expectationsテスティ
ングフレームワークによるテストが生成されます。

expectationsは「gem install expectations」でインストールできます。
理解しやすいテストコードになるのでお気に入りです。

require 'rubygems'
require 'expectations'

Expectations do
  1+1                           # =>
  "aa".length                   # =>
end

↓ (xmpfilter --expectations)

require 'rubygems'
require 'expectations'

Expectations do
  expect 2 do
    1+1
  end

  expect 2 do
    "aa".length
  end

end

== anything.el との連携

Emacs界隈で流行っているanything.elのインターフェースを利用してメソッド
の補完を行う anything-rcodetools.el が添付されました。

http://d.hatena.ne.jp/rubikitch/20080104/1199438501

anything.elのメンテナも僕がやっています。anything.elの原作者から開発を
引き継ぎました。anything.elのバグレポ、要望などは<rubikitch __AT__
ruby-lang __DOT__ org> までメールください。

== xmpfilterで「--tempfile」、「--tmpfile」オプションを追加

Unix系OSではxmpfilterはopen3を使ってxmpfilterが生成する中間スクリプトを
実行しています。--tempfile、--tmpfileオプションをつけると、Windows同様
一時ファイルを利用するようになります。Ruby 1.9のエンコーディング対策で
す。

xmpfilterのデフォルトは標準入力からのスクリプトなのでmagic commentなし
でも日本語を認識します。(ロケールエンコーディング)

== rct-forkで重いライブラリのロードもへっちゃら

active_supportなど重いライブラリを使っている場合、注釈や補完がとても遅
くなってしまいます。なぜなら、注釈や補完のたびにスクリプトを実行してい
るからです。「time ruby -rubygems -e 'require "active_support"'」でロー
ド時間を計測すると、こちらの環境(Pentium4)では1秒前後もかかってしまい
ます。

# rct-forkなしの場合
start = Time.now
require 'rubygems'
require 'active_support'
2.hour            # => 7200 seconds
# 経過時間
Time.now - start  # => 0.962633

そこで、別の端末でrct-forkコマンドを使えば、予めロードされた状態で注釈
や補完が実行されるため、一瞬で実行が終わります。rct-forkはRubyGemsがロー
ドされているので、この場合「rct-fork -r active_support」を実行します。
rct-forkを終了するときは、Ctrl+Cで強制終了してください。

Emacsの中でrct-forkを起動することもできます。「M-x rct-fork」でオプショ
ンを入力します。rct-forkを終了するときは、「M-x rct-fork-kill」を実行し
ます。rct-forkが起動中のときはモードラインに <rct-fork> と出ます。
Vimインターフェースは次のリリースでサポートするでしょう。

# 「rct-fork -r active_support」を実行したとき
start = Time.now
require 'rubygems'
require 'active_support'
2.hour            # => 7200 seconds
# 経過時間
Time.now - start  # => 0.006392

fork(2)を使っているので、rct-forkが使えるのはUnix系OSのみです。


それではHappy Hacking!

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/