emacs+pyflakes+flymakeでpythonの構文チェックを勝手にしてもらう
リアルタイムに構文チェックしたい
flymakeについては、flymake (いままでこれ無しでどうやってプログラム書いてたんだろう) - にゃあさんの戯言日記 ここを参考にされたし。emacsで書いてる傍から、リアルタイムに構文チェックが走るというやつ。メジャーな言語なら多分あると思う。
pythonとか動的型付け言語だと、コンパイルフェーズがないから、変数宣言を忘れたり、構文エラーでも実行しないと、それがエラーなのかわからないので困る。特に、重い計算するときに、途中まで処理うまくいったのに、ある関数を呼び出したら変数が未定義でエラーとかつらい。なので、事前に潰しておきたいというモチベーション。ちなみに、emacs 24.4.1を対象としています。このくらい新しいバージョンのemacsだと、flymakeはもう入ってるからすぐ使える。
pyflakesのインストール
pip pyflakes
すればよいです。which pyflakes
でpathをメモっておく。pyenvでインストールしたpythonだと、$HOME/.pyenv/shims/pyflakes
にあると思う。
emacsの設定
(add-hook 'find-file-hook 'flymake-find-file-hook) (when (load "flymake" t) (defun flymake-pyflakes-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 "PATH_TO_YOUR_pyflakes" (list local-file)))) (add-to-list 'flymake-allowed-file-name-masks '("\\.py\\'" flymake-pyflakes-init))) ; show message on mini-buffer (defun flymake-show-help () (when (get-char-property (point) 'flymake-overlay) (let ((help (get-char-property (point) 'help-echo))) (if help (message "%s" help))))) (add-hook 'post-command-hook 'flymake-show-help)
PATH_TO_YOUR_pyflackes
を書き換えると、pyflakesがホックされてemacs上でほぼリアルタイムに入力に対して、チェッカーが動く。flymake-show-help
という関数が定義されているが、この関数がflymakeのメッセージをemacsのミニバッファに表示してくれるので便利。
様子
importしたのに使ってないとか、定義してない変数ですよとか親切。