SpiderMonkey と flymake を使って Meadow 上で JavaScript のシンタックスエラーを検出する
タイトル長いな。。
とりあえずできたみたいなので手順をメモしておく。
なお以下の操作は全て Meadow の eshell でやってます。
$ wget ftp://ftp.mozilla.org/pub/js/js-1.7.0.tar.gz $ tar xvzf js-1.7.0.tar.gz $ cd js/src $ make -f Makefile.ref OS_ARCH=Linux (途中で失敗するけど気にしない) $ make -f Makefile.ref OS_ARCH=Linux js (これもうまくいかないみたいだけど気にしない) (Linux_All_DBG.OBJ以下のjs.exeがお目当てのものなので、これさえあればOK!) $ cp Linux_All_DBG.OBJ/js.exe c:/Meadow/bin/ (なぜMeadowのbinなのかは気にしないで下さい。僕はなんかここが好きなんです。) (パスさえ通ってればどこにコピーしても大丈夫です。)
そして以下を.emacsに追加します。
;; flymake を使ってシンタックスエラーを検出する (require 'flymake) (defconst flymake-allowed-js-file-name-masks '(("\\.json$" flymake-js-init) ("\\.js$" flymake-js-init))) (defcustom flymake-js-detect-trailing-comma t nil :type 'boolean) (defvar flymake-js-err-line-patterns '(("^\\(.+\\)\:\\([0-9]+\\)\: \\(SyntaxError\:.+\\)\:$" 1 2 nil 3))) (when flymake-js-detect-trailing-comma (setq flymake-js-err-line-patterns (append flymake-js-err-line-patterns '(("^\\(.+\\)\:\\([0-9]+\\)\: \\(strict warning: trailing comma.+\\)\:$" 1 2 nil 3))))) (defun flymake-js-init () (let* ((temp-file (flymake-init-create-temp-buffer-copy 'flymake-create-temp-inplace)) (local-file (file-relative-name temp-file (file-name-directory buffer-file-name)))) (list "js" (list "-s" local-file)))) (defun flymake-js-load () (interactive) (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted) (setq flymake-check-was-interrupted t)) (ad-activate 'flymake-post-syntax-check) (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-js-file-name-masks)) (setq flymake-err-line-patterns flymake-js-err-line-patterns) (flymake-mode t)) (add-hook 'javascript-mode-hook '(lambda () (flymake-js-load)))
これでうまくいきました。
効果の程は適当にJSファイル開いて適当に何か打ってみたりすれば分かります。