How can I use Emacs Flymake mode for python with pyflakes and pylint checking code?

后端 未结 4 1552
闹比i
闹比i 2020-12-12 17:53

For checking code in python mode I use flymake with pyflakes

Also I want check code style (pep8) with pylint (description on the same page with pyflakes)

Thi

相关标签:
4条回答
  • 2020-12-12 18:31

    Windows batch version of vaab's pychechker

    @echo on
    pylint %1
    pep8 --ignore=E221,E701,E202 --repeat %1
    pyflakes %1
    
    0 讨论(0)
  • 2020-12-12 18:33

    You may want to check out the Lisp script here (http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html), which should help with checking PEP8 a la pep8.py. I don't use pyflakes or pylint, but I imagine you could easily adjust this to work with other checkers.

    0 讨论(0)
  • 2020-12-12 18:40

    Usually one can enable flymake mode in the python-mode-hook. Unfortunately that causes issues with things like py-execute-buffer which create temporary buffers which invoke the hook and then cause flymake mode to hiccup because of the lack of "real file". The solution is to modify the conditions where you add the hook:- e.g mine is:

    (add-hook 'python-mode-hook 
          (lambda () 
            (unless (eq buffer-file-name nil) (flymake-mode 1)) ;dont invoke flymake on temporary buffers for the interpreter
            (local-set-key [f2] 'flymake-goto-prev-error)
            (local-set-key [f3] 'flymake-goto-next-error)
            ))
    
    0 讨论(0)
  • 2020-12-12 18:43

    Well, flymake is just looking for a executable command thats output lines in a predefined format. You can make a shell script for example that will call successively all the checkers you want...

    You must also make sure that your script ends by returning errorlevel 0. So this is an example:

    This is what I've done in a "pycheckers" script:

    #!/bin/bash
    
    epylint "$1" 2>/dev/null
    pyflakes "$1"
    pep8 --ignore=E221,E701,E202 --repeat "$1"
    true
    

    For the emacs lisp part:

    (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 "pycheckers"  (list local-file))))
      (add-to-list 'flymake-allowed-file-name-masks
                   '("\\.py\\'" flymake-pyflakes-init)))
    
    0 讨论(0)
提交回复
热议问题