LoginSignup
35
31

More than 5 years have passed since last update.

Emacs で Python のソースコードを編集するあいだ常に PEP8 のチェックをおこなう

Last updated at Posted at 2014-08-14

昨日は Python のコーディング規約 PEP8 について書きました。

Emacs で Python のソースコードを書いているあいだ、常に PEP8 の適合性が検査され、それが可視化されるとさらに便利です。

今回紹介する Emacs Lisp を利用すると、下のように常に PEP8 の適合性違反が Emacs 上に可視化されます。

1.png

また Python の編集中のみ、特定のキーバインドでミニバッファに PEP8 のチェック結果を表示することができるようになります。

前提となる Emacs Lisp

まずは Emacs で Python の開発をするための前提となる Emacs Lisp を用意します。

python-mode.el

Python のメジャーモードとしてはいくつかありますが筆者のおすすめは python-mode.el です。

python-mode.el
http://www.emacswiki.org/emacs/PythonProgrammingInEmacs

これは最も機能が豊富です。

flymake-cursor.el

Emacs 23 以降で既定となった flymake と協調し、ミニバッファ上の現在の行に flymake のエラーを表示します。

flymake-cursor.el
https://github.com/illusori/emacs-flymake-cursor

Python モードの設定をおこなう

昨日の記事では (when (load "python-pep8") (define-key global-map "\C-c\ p" 'python-pep8)) としましたが、これだとあらゆるファイルを編集中に C-c p で pep8 のチェックが走ってしまいます。そこで python-mode のフックを利用し Python を編集中のみ有効にすると良いでしょう。

これを踏まえて、次のように python-mode のための設定を Emacs Lisp で記述します。

;; python-mode をロードする
(when (autoload 'python-mode "python-mode" "Python editing mode." t)
  ;; python-mode のときのみ python-pep8 のキーバインドを有効にする
  (setq python-mode-hook
  (function (lambda ()
    (local-set-key "\C-c\ p" 'python-pep8))))
  (setq auto-mode-alist (cons '("\\.py$" . python-mode) auto-mode-alist))
  (setq interpreter-mode-alist (cons '("python" . python-mode)
                                     interpreter-mode-alist)))

;; flymake for python
(add-hook 'python-mode-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 "/usr/local/sbin/pyck"  (list local-file))))
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.py\\'" flymake-pyflakes-init)))
(load-library "flymake-cursor")

これで冒頭で紹介した状態になります。なお、無視したいエラーは、上から呼ばれるシェルスクリプト内および python-pep8 で指定することができます。

python-pep8.el でエラーを無視するには、次のように Emacs Lisp を編集して pep8 のオプションとして渡します。

(defcustom python-pep8-options '("--ignore=E302")
  "Options to pass to pep8.py"
  :type '(repeat string)
  :group 'python-pep8)

まとめ

Emacs の設定は人によりそれぞれですが、今回の内容をもとに各々が開発しやすい環境を作るとより幸せになれるでしょう。

35
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
31