Flymakeのススメ(PHP版 , JS版)

Emacs使いなら普通に使ってるよね、ってな素晴らしいEmacs Lispの一つにFlymakeというのがあります。これは名前の通り、Emacsでファイル編集中にon the flyにmake(設定次第で何でも)してくれるEmacs Lispです。makeしてエラーが出た場合には、エラー箇所をハイライトしてくれます。typo などがあれば瞬時に気づくことができますので、開発効率がアップします。

青くハイライトされているのがwarning、赤はエラーの意味です。

PHPもJavaScriptも他の方が設定を公開されていますけど、社内で設定を紹介したところ、「Warningに別の色が付いたりしないんですね」などと言われたので、ムキになってWarningにも色を付けてみました。そんなわけで、他の方の設定とはひと味違うと思います。実はPHPに関して言うと滅多にWarningが出ないので、便利になったかどうかは疑問ですが…。

JavaScriptについてはJavaScript Lintが素晴らしいですね。macportsならport install javascript-lintでインストールできます。「JavaScript Lint – あどけない話」に書いてある通りなのですが、これもWarningに別の色が付くように頑張ってみました。

.emacsに書く設定内容は下記の通りです。下記でも動作はしますがblogシステムの都合で少し冗長なので、実際に利用される場合はdot-emacs.txtからコピペする方が良いかもしれません。

;; flymake (Emacs22から標準添付されている)
(when (require (quote flymake) nil t)
  (global-set-key "\C-cd" (quote flymake-display-err-menu-for-current-line))
  ;; PHP用設定
  (when (not (fboundp (quote flymake-php-init)))
    ;; flymake-php-initが未定義のバージョンだったら、自分で定義する
    (defun flymake-php-init ()
      (let* ((temp-file   (flymake-init-create-temp-buffer-copy
                           (quote flymake-create-temp-inplace)))
             (local-file  (file-relative-name
                           temp-file
                           (file-name-directory buffer-file-name))))
        (list "php" (list "-f" local-file "-l"))))
    (setq flymake-allowed-file-name-masks
          (append
           flymake-allowed-file-name-masks
           (quote (("\.php[345]?$" flymake-php-init)))))
    (setq flymake-err-line-patterns
          (cons
           (quote ("\(\(?:Parse error\|Fatal error\|Warning\): .*\) in \(.*\) on line \([0-9]+\)" 2 3 nil 1))
           flymake-err-line-patterns)))
  ;; JavaScript用設定
  (when (not (fboundp (quote flymake-javascript-init)))
    ;; flymake-javascript-initが未定義のバージョンだったら、自分で定義する
    (defun flymake-javascript-init ()
      (let* ((temp-file (flymake-init-create-temp-buffer-copy
                         (quote flymake-create-temp-inplace)))
             (local-file (file-relative-name
                          temp-file
                          (file-name-directory buffer-file-name))))
        ;;(list "js" (list "-s" local-file))
        (list "jsl" (list "-process" local-file))
        ))
    (setq flymake-allowed-file-name-masks
          (append
           flymake-allowed-file-name-masks
           (quote (("\.json$" flymake-javascript-init)
                   ("\.js$" flymake-javascript-init)))))
    (setq flymake-err-line-patterns
          (cons
           (quote ("\(.+\)(\([0-9]+\)): \(?:lint \)?\(\(?:warning\|SyntaxError\):.+\)" 1 2 nil 3))
           flymake-err-line-patterns)))
  (add-hook (quote php-mode-hook)
            (quote (lambda() (flymake-mode t))))
  (add-hook (quote javascript-mode-hook)
            (quote (lambda() (flymake-mode t)))))

私は他にもYAMLのチェックをsyckでやっていたりもするのですが、これはイマイチなのでオススメしません。もっと良い方法があればいいんですが…。

参考リンク

コメント / トラックバックはありません

コメントする