h1mesuke / unite-outline

outline source for unite.vim
http://d.hatena.ne.jp/h1mesuke/20101107/p1
128 stars 61 forks source link

Improve JavaScript's outline info. #14

Open h1mesuke opened 13 years ago

h1mesuke commented 13 years ago

現在、JavaScript の見出し抽出は正規表現マッチ+create_heading() でやっているが、限界

実行時にならないとわからない情報が多いため、見出し間の親子関係が把握しづらく、ツリーが作りにくい。 また、OOP の流儀(書き方)もいろいろあるので、オブジェクトの役割(見出しの type)も判別しにくく、 適切なハイライトを設定することも難しい。

案1: jsctags を呼び出す

C/C++/Java で ctags を使うのと同様の発想。以下のエントリに触発されてのもの↓

Awesome vim support for javascript with jsctags and taglist-plus | discontinuously.com http://discontinuously.com/2011/03/vim-support-javascript-taglist-plus/

Miscellany: Introducing jsctags http://pcwalton.blogspot.com/2010/05/introducing-jsctags.html

taglist-plus はこれでうまくやっているらしい。

問題点

jsctags ほど導入に手間のかかるものを required とすることはできないと思うので、あれば使う、という感じになると思う。 よって、結局現在の outline info をなくせるわけではない。こっちはこっちで頑張る必要あり。

導入の手間より問題なのは、jsctags自体がスクリプトの評価中に落ちてしまうことだ。 自分が試したバージョンでは jQuery を食わせたら落ちてしまった。これではちょっと話にならない。今なら大丈夫か?

jsctags自体の開発の動向をしばらく見守る必要がある。

案2: Vim script で頑張る

jsctags を使うにしても、optional という扱いになると思うので、結局こっちも必要

幸いなことに関数の定義には予約語 function が使われる分、C/C++/Java のように定義と呼び出しが見分けられないみたいなことはないだけマシか。後は、コードが適切にインデントされているという前提であれば、なんとか……

問題はクラスとメソッド、という親子の関係をどう認識して、論理的に正しい見出しのツリーを作ることができるか。 JavaScript の OOP は書き方もいろいろあるので、そこをどうするかが一番難しい気がする。