2010/02/18(Thu)
js2-mode がよさげ (espresso.el 他追記あり)
Javascript をバリバリ書きたくなったのでちゃんと major-mode を設定しようと思い、調べたらイマドキは js2-mode がいいらしい。なんか Google の中のひと (Ruby on Rails を Javascript に移植しただとかで有名なプログラマ) が作ったとかなんとかで、定評があるみたい。なので入れてみたら結構良かった。
参考にしたページは、
- Emacs で JavaScript を書く ... 導入の手引きと基本的な設定 (.emacs)
- js2-modeを使いやすくする - speg03の雑記帳 ... インデントを調整 (espresso.el が別に必要)
あと js2-mode でぐぐって出てきたページいろいろも参考にしたけど実際に .emacs にコピペしたのは上の二ページのぶんだけ。
flymake みたいに書いてるそばから裏で構文チェックが走って下線ひいて教えてくれる。でも flymake じゃなくて構文チェッカを自前実装してるのかな?(よくわかりません)外部コマンド叩かないからなのか flymake に比べてもたつくことがない、気がする。でもちょっと小うるさい感じもする。無名関数の中で return; を明示してないと「値が返ってないよ」とかモードラインに出たりとか。 $.ajax(); 呼ぶだけとか返り値いらないときもゲンミツにチェックしてくれちゃうみたいなので、やや宗教的なのかもしれない。 js バリバリだぜーっていう人は合わないかも。俺は自信ないのでありがたい。
他にもっと便利な機能があるのかもしれないけど一切わかりません。あとバイトコンパイル必須なんだけどやり方も上にあげたページに丁寧に書いてあるのでつまずくことなく導入できると思う。あとインデント調整で必要らしくて入れた espresso.el もなんだかわかってない。コーヒーが飲みたくなる名前だ。 => いくつか追記しました。
追記
espresso-mode をみると espresso-mode も Javascript 用のモードらしい。これもバイトコンパイルしたほうがいいぜって書いてあるけど、 js2-mode よりは軽めなのかなという印象。
さらに追記
インデントまわりを調整するコードの出所の Editing JavaScript with Emacs ? js2-mode / Projects / Mishoo’s homepage を読んだ。コードはあんまりちゃんと読んでないけど、要するに espresso-mode.el のインデントは気に入ったのでそっちの値をつかってごにょごにょやってるらしい。
あとなんで js2-mode のシンタックスチェックが良いのかという点についても少し解説があって、抽象構文木(abstract syntax tree、AST)というものを作ってるらしい。つまり Emacs Lisp で Javascript を完全にパースしてるということで、だからコードも長いしバイトコンパイルでもしないと遅くて使い物にならんということのようだ。ちなみにこの件とは全く無関係に id:IMAKADO のブログの過去ログを読んでて見つけた気がするけど、 js2-mode の作者の Steve Yegge は「Emacs Lisp はコンパイラもついてるしとても良い言語だ。少し癖はあるけど」と言っているらしい。
あとこのインデントの人が js2-highlight-vars-mode ってマイナーモードも書いたらしくて、ああこれを先に書くべきだったけど google code で配布されてる js2-mode よりも SVN からとってきたほうが新しくて多少良くなってるらしい。で、コイツが作った js2-highlight-vars-mode ってのはその SVN 版がないと動かないとか。で実際コレが何するモードなのかというと...わかりません!俺の js2-mode はまだリリース版だから。でもなんか「オレの友達が Eclispe でほげほげしてたのが羨ましかったので作りました」みたいなことが書いてあって、結局よくわからない。じゃあ Eclispe 使ったらよくね?とか言われそう。
コイツの話よりもう少し意味がありそうなこととして、 js2-mode はけっこういろんな API を提供してて、それを使うと AST を簡単に走査できたりしますよー、という例も書いてあった。なので、 js2-mode 必須だけど Javascript のコードを Emacs で書いたり読んだりするときにもっと便利に何かをしたいという人はこの API を使うと楽に作れるんじゃないかな、と思った。
- 43 http://pipes.yahoo.com/pipes/pipe.info?_id=faa858a20082ef6d25ad27557e37e011
- 35 http://reader.livedoor.com/reader/
- 29 http://www.google.co.jp/url?sa=t&rct=j&q=emacs js2-mode&source=web&cd=4&ved=0CDcQFjAD&url=http://d.hatena.ne.jp/a666666/20100218/1266424202&ei=zSahTpaTD4_umAWJqYyjCQ&usg=AFQjCNFTOCm1TmdmrtNuUgM7mRDNFZQJ_Q&sig2=OpZIlYG0Z7fwa8iYaCtv1g
- 26 http://www.google.co.jp/url?sa=t&rct=j&q=espresso.el&source=web&cd=1&ved=0CC8QFjAA&url=http://d.hatena.ne.jp/a666666/20100218/1266424202&ei=1jrETuHEF8b6mAWz5siBCw&usg=AFQjCNFTOCm1TmdmrtNuUgM7mRDNFZQJ_Q&sig2=inroCQX5lN3KOJviZxlvcA
- 25 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=espresso.el
- 19 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=js2-mode+flymake
- 17 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=emacs+js2-mode+indent
- 16 http://www.google.co.jp/search?q=espresso.el&ie=utf-8&oe=utf-8&aq=t&rls=org.gentoo:en-US:unofficial&client=firefox-a
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CCsQFjAA&url=http://d.hatena.ne.jp/a666666/20100218/1266424202&ei=3ChsT_qXLY6OmQXZuKWXBg&usg=AFQjCNFTOCm1TmdmrtNuUgM7mRDNFZQJ_Q&sig2=DwOW1oxpPXz9lydaEIV8EA
- 13 http://d.hatena.ne.jp/speg03/20091011/1255244329
