javascript-mode をごにょごにょしよう

変数名の補完

スコープを意識した変数名(識別子)とかの補完。

global から function, with, catch のとこは区切ってスコープごとに宣言された変数名を集めておく。んで補完するときに今のスコープからスコープチェイン内の変数名をリストにして補完候補として使う。

function は引数と arguments もくっつける。
catch は引数だけくっつける。
with は引数のプロパティをくっつける。どうやって・・・あとで考えよう。with ブロック内で var したときの挙動が謎い。調べる。ひょっとして catch ブロックも?

オブジェクトのプロパティ名の補完

それぞれのオブジェクトに応じてプロトタイプチェインを辿ってプロパティ名をリストにして補完候補として使う。

オブジェクトごとにプロパティリストを作っておく。インスタンスごとに?ちょぉ重そう・・・。
オブジェクトは変数かどっかのオブジェクトのプロパティに代入されてるはずなんで、識別子からオブジェクトを特定する方法が必要。ビルトインの document とかは

var document = new Document();

みたいな解釈でたぶんだいじょぶ。global スコープに識別子 "document" を置いといてそれのプロパティリストを見つけられるように。

new されたオブジェクトとか、Object オブジェクトとか、Array の要素とかにどんなプロパティがあるかってどうやって調べる?

function Class(arg){
  this.prop = arg;
};
Class.prototype.method = function(){ ... };
va Inst = new Class(obj);

var Obj = {hoge: "fuga", foo: "bar"};
Obj.prop = "blah, blah, blah";
Obj.method = function(arg){ ... };

var Ary = [Obj, Inst, "string", 33];

・・・どうしよう。とりあえず作ってみよう。