以前[permalink id=499]ruby-lintでRubyのソースを静的チェック[/permalink]で紹介したように、ruby-lintを使えばRubyのソースを静的にチェックすることができるので、これを使ってRubyのソースを保存するときにflymakeするEmacsの設定を書いてみた。(前提として、ruby-lintをインストールしておく必要がある。"gem install ruby-lint"でOK)
(defun flymake-ruby-init ()
(let* *1
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "ruby-lint" (list local-file))))
(defconst flymake-allowed-ruby-file-name-masks
'*2
(ad-activate 'flymake-post-syntax-check)
(setq flymake-allowed-file-name-masks
(append flymake-allowed-file-name-masks flymake-allowed-ruby-file-name-masks))
(setq flymake-err-line-patterns flymake-ruby-err-line-patterns)
(flymake-mode t))
;(add-hook 'ruby-mode-hook '(lambda () (flymake-ruby-load)))
(add-hook
'ruby-mode-hook
'(lambda ()
;; rhtmlファイルではflymakeしない
(if (not (null buffer-file-name)) (flymake-ruby-load))
))
動作イメージ
[tmkm-amazon]4774150029[/tmkm-amazon]
*1:temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace
("^Rakefile$" flymake-ruby-init)))
(defvar flymake-ruby-err-line-patterns
'(("^\(.*\): .+: line \([0-9]+\), .+: \(.*\)$" 1 2 nil 3)))
; /tmp/a.rb: error: line 5, column 15: undefined local variable or method a
(defun flymake-ruby-load ()
(interactive)
(defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
(setq flymake-check-was-interrupted t