flymake でリアルタイム文法チェック

Emacs Wiki に載っててこれは!と思ったので勝手に転載してみる.
この flymake を使うと Ruby でリアルタイムの文法チェックができる.
flymake は, Emacs 22 ならば, デフォルトで入っている.

;;;;  flymake for ruby
(require 'flymake)
;; I don't like the default colors :)
(set-face-background 'flymake-errline "red4")
(set-face-background 'flymake-warnline "dark slate blue")
;; Invoke ruby with '-c' to get syntax checking
(defun flymake-ruby-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 "ruby" (list "-c" local-file))))
(push '(".+\\.rb$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("Rakefile$" flymake-ruby-init) flymake-allowed-file-name-masks)
(push '("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3) flymake-err-line-patterns)


(add-hook
 'ruby-mode-hook
 '(lambda ()
    ;; Don't want flymake mode for ruby regions in rhtml files
    (if (not (null buffer-file-name)) (flymake-mode))))

まずい行があると赤く表示されるっぽいね.
けっこう便利かも.
これを利用してると, 凡ミスが減ると思う.



ブクマした記事をとりあえず, メモみたいな意味を込めて超クオリティの低いエントリにしてみた.
これだけじゃあんまりやから, スクリーンショットでお茶を濁してみる.
例えば, 以下の Hello, World を表示するだけの正しいコードを間違えて書いた場合.

def test()
  puts "hello"
end

test

こんなことをしてみる.

  1. 2行目の「puts "hello"」の最後の「"」を無くしてみる
  2. 3行目の「end」を「emd」としてみる.

まず1番目.



そして, 2番目.



こんな感じ.


この例はあまりよくなくて, ruby-mode の機能だけで, 今回のエラーは視覚化できちゃう.
ダブルクォーテーション閉じ忘れてたら, その先のコードの色は, 全部変わるし,
end を打ち間違えてたら, 色が付かない. 何より, C-cC-e で end は挿入できる(ruby-insert-end).
でも, この flyamke は, ruby -c コマンドで文法チェックを行っているから, より細かいものにも対応できるはず.
だから, いざ実行段階になって, なんだこのエラー???ということになりづらくなると思う.
# リアルタイムでチェックしてるから, 間違ったことを書いたら, すぐ反映されるため.
使っててソンは, 無い機能やと思う.
まあ, 今日はじめて試したばっかやから他の部分で問題が出るかもしれないけど,
その場合, flymake-mode をオフにすればいいだけやしね.



なんかまとまんない記事書いちゃったなあ・・・.

追記

こんなの書いてみると良いかもしれない.

(add-hook
 'ruby-mode-hook
 '(lambda ()
    (define-key ruby-mode-map "\C-cd" 'flymake-display-err-menu-for-current-line)))

エラーが見つかった行, つまり赤色にハイライトされた行で C-cd とすると, そのエラーの内容がポップアップで表示される.
ポップアップは, ちょっと特殊なもの.
ミニバッファとかじゃない. たぶん, Emacs を端末上で起動したんじゃ使えないと思う. GUI で起動しないと.
そのエラーを表示するウィンドウは, マウスカーソルがあるあたりに出る.
ウィンドウを消すのは, 普通に C-g で消える.
けっこう便利.



こんな感じで表示される.

こーゆーのの表示はミニバッファでいい気がするけどねえ.
(追記)解決!やった. http://d.hatena.ne.jp/khiker/20070720/emacs_flymake

さらに追記

かなりの量ブックマークされてて,
こんなまとまってないエントリなのに悪いな, と思ったので,
他の flymake について書かれているサイトへのリンク集を追記してみる.

更新時刻

  • 1かいめ 2007年, 7月1日, 3:21
  • 2かいめ 2007年, 7月1日, 22:44
  • 3かいめ 2007年, 7月15日, 17:30
  • 4かいめ 2007年, 7月16日, 0:44
  • 5かいめ 2007年, 7月21日, 5:42