coリ・ー・ン<2nd life

2006 09 04

ctags で JavaScriptタグを生成

エディタを使う上でわりと欠かせないのが、ctags(じゃなくてもいいけど)によるタグの生成です。あらかじめタグを作っておけば、関数などの補完も効くし、タグジャンプで即座にソースが読めて非常に便利です。

しかしながら現在Exuberant Ctags の最新版では、JavaScriptタグ生成が

function funcname(){}

という関数の書き方にしか対応しておらず、最近JavaScript プログラミングでよく使われるプロパティ関数を定義するタイプ

funcname: function(){}

という書き方ではタグ生成がされず悲しいです。で、prototype.js やら MochiKit やらを多用してるとタグジャンプがないのは不便すぎて悲しくなってきたので、当初は jstags という rubyJavaScript タグ生成のプログラムを作って代用してました。が、ふと ctags のソースを読んだら正規表現を付け足すだけでプロパティ関数定義する書き方でも対応することができたのでパッチを作ってみました。

http://rails2u.com/misc/jscript.property_style_function.diff

この patch を当てることで、

なにやら ML 読んでいたら、このシンタックス( funcname = function(){} とか)はあんまり一般的じゃないのでデフォルトでは使わないよ。使いたければ config に --regex-javascript で書いてね(意訳)と書いてありました。なんだってー。試しに patch を当てずに ~/.ctags に

--regex-javascript=/^[ \t]*(['"]?)([A-Za-z0-9_.]+)\1[ \t]*[:=][ \t]*function[ \t]*\(/\2/I,inner/i

を書いたらそれだけでうまくいったという…。というわけで、このようにコンフィグを設定すると、例えば MochiKit/Base.js のタグ

$ ctags -f - ~/src/mochikit/MochiKit/Base.js | tail -n 5
updatetree      /home/gorou/src/mochikit/MochiKit/Base.js       /^    updatetree: function (self, obj\/*, ...*\/) {$/;" f
xfilter /home/gorou/src/mochikit/MochiKit/Base.js       /^    xfilter: function (fn\/*, obj... *\/) {$/;"       f
xmap    /home/gorou/src/mochikit/MochiKit/Base.js       /^    xmap: function (fn\/*, obj... *\/) {$/;"  f
xor     /home/gorou/src/mochikit/MochiKit/Base.js       /^        xor: function (a, b) { return a ^ b; },$/;"   f
zrshift /home/gorou/src/mochikit/MochiKit/Base.js       /^        zrshift: function (a, b) { return a >>> b; },$/;"     f

とうまく出力されるようになりました。これでタグが無いと悲しくて枕を涙でぬらす人でも安心して JavaScript プログラミングができるようになりますね!

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

プログラミングRuby 第2版 言語編
Ruby を始めようと思う人から玄人まで身近に置いておきたい一冊
Ruby on Rails入門―優しいRailsの育て方
Rails 入門書の決定版!あのくまくまーの独特な解説ですんなり読める!