oinume journal

Scratchpad of what I learned

Emacs + ruby-lint + flymakeでRubyのソースを静的チェック

以前[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))

))

 

 

動作イメージ

 

Emacsでruby-lint + flymakeでRubyのソースを静的チェック

 

[tmkm-amazon]4774150029[/tmkm-amazon]

*1:temp-file (flymake-init-create-temp-buffer-copy

'flymake-create-temp-inplace

*2:"\.rb$" flymake-ruby-init)

("^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