tech memorandom

Webに関して調査したことや、メディアアート系(Max,Processing)で調査したことなどを書いていきます。

coffeescriptでflymake

coffee書いているとたまにインデントをミスってあとで苦い思いしながら修正ってことが多かったのでflymakeで
事前にSyntaxエラーをわかるようにしてみました。わりと快適になったのでなんとなく共有。

(when (require (quote flymake) nil t)

(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
(setq flymake-check-was-interrupted t))
(ad-activate 'flymake-post-syntax-check)
  (when (not (fboundp 'flymake-php-init))
    ;; flymake-php-initが未定義のバージョンだったら、自分で定義する
  (defun flymake-coffee-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 "coffee" (list "-bc" local-file))))
      (push '(".+\\.coffee$" flymake-coffee-init) flymake-allowed-file-name-masks)
      (push '("\\(Error: In \\([^,]+\\), .+ on line \\([0-9]+\\).*\\)" 2 3 nil 1) flymake-err-line-patterns)
(add-hook 'coffee-mode-hook
          '(lambda () (flymake-mode t)))

    ;;エラー行をmini bufferに表示
      (global-set-key "\M-e" 'flymake-goto-next-error)
      (global-set-key "\M-E" 'flymake-goto-prev-error)
    ;; gotoした際にエラーメッセージをminibufferに表示する
    (defun display-error-message ()
      (message (get-char-property (point) 'help-echo)))
    (defadvice flymake-goto-prev-error (after flymake-goto-prev-error-display-message)
      (display-error-message))
    (defadvice flymake-goto-next-error (after flymake-goto-next-error-display-message)
      (display-error-message))
    (ad-activate 'flymake-goto-prev-error 'flymake-goto-prev-error-display-message)
    (ad-activate 'flymake-goto-next-error 'flymake-goto-next-error-display-message)

他おすすめなlispは、HighlightIndentationとかもいいです。
indentの可視化ができます。ただインデントが深いコードをひらくとかなり重たくなるので常時使用はちょっと厳しいです。

追記)
すでにこんなのがあるよ!とFacebookに同僚に教えてもらいました。こっちつかったほうがいいかもしれません。
https://github.com/purcell/flymake-coffee


(CoffeeScrpitについて余談)
Coffeescriptって、javascriptを短く書くためのものみたいな感じでサイトでふれまわったせいか、
短く書くためにcoffeescriptを使うみたいなイメージが強かったりするんじゃないかと思う。

実際使ってみて思うのは短く書くためのツールというより、
Javascriptをオブジェクト思考らしく書けるようにしたもの、という印象が強い。
生成されるJSのコードがとてもメンテできないものか、というとそうでもない。

JSのプロトタイプ型オブジェクト思考をちゃんと理解している人が書きそうなコードが生成される。
extendsとか使うとちょっとごちゃごちゃするけど、それもJSで継承をちゃんと書ける人なら読めるコードだと思う。
むしろ、Coffeeeが生成したコードを読んで逆に理解を深めたぐらい。

CoffeeScriptのいいところ、逆にいうとJavaScriptの危ないところを丁寧解説していて、
それらを保管するためにCoffeeScriptでとったアプローチがちゃんと書かれているのでCoffescriptに興味を持たれた方は一読されてみてるといいかもしれません。

The Little Book on CoffeeSript

これの1.〜3.まで読むとCoffeeScriptがなぜ生まれたのか、なぜ有意義なのか、ちょっとわかると思います。

JavaScriptについて骨の髄まで理解したエンジニアではないので、CoffeeScriptってこうゆう見方もあるよ、
ぐらいにうけてとめてもらえると幸いです。