vim_goshreplに自動use機能とwhich-module関数を追加しました


先日こちらで紹介したVim上で動作するGaucheのREPLプラグインに新しい機能を実装したので紹介します。

  • 自動use機能

    まだ読み込まれていないモジュールのシンボルを使用したときに、自動的に必要なモジュールをuseする機能です。
  • which-module関数

    シンボルがどのモジュールに属しているか検索するための関数です。

    標準のaproposの全モジュール版のような感じです。


自動use機能
自動useは、まだ読み込まれていないモジュールのシンボルを使用したときに、自動的に必要なモジュールを探し出しuseする機能です。
僕の場合、REPLをエディタ内で編集中のコード片を張り付けてテストするために使うことが多いのですが、そのたびに必要なモジュールをuseするのは面倒でした。
そこで標準のREPLにはない機能ですが自作のスクリプトに実装しました。
標準とは違う挙動になってしまうのでデフォルトでこの機能は無効になっています。
自動use機能を使う場合はvimrc内に、

let g:gosh_enable_auto_use = 1

と書いてください。


自動use機能ですが、あらかじめシンボルとモジュールの対応を生成しておいてその中から探し出すという方法を取っているため、
自動でモジュールを探し出せるのは標準で用意されているモジュールだけです。
ユーザーが独自に追加したモジュールなどは自動useすることはできません。あしからず。


which-module関数
これも標準のREPLにはない機能ですが、あると便利なので実装しました。
標準で用意されているaproposとの違いは、
まだimport(use)していないモジュールからも検索することと、
自動use機能と同じように事前にシンボル<->モジュールの対応を取っているため、標準以外のシンボルの検索はできないというところです。


which-moduleは関数として定義しています。インタフェースは以下のような感じ。

(which-module pattern :key (match 'submatch))

  • pattern

    patternはシンボル・文字列・正規表現を指定することができます。

    このpatternにマッチするようなシンボルがリスト表示されます。
  • :match

    :matchには'submatchシンボルまたは'strictシンボルを指定することができます。

    'submatchの場合、aproposと同じように部分一致でもマッチしたと判定します。

    'strictの場合、完全一致のシンボルのみマッチしたと判定されます。