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

4

23

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)

This solutions work. But I can't configure flymake for work with pyflakes and pylint together. How can I do it?

Artisan answered 11/8, 2009 at 11:47 Comment(0)
P
36

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)))
Perforate answered 8/9, 2009 at 11:57 Comment(8)
While I can see the errors hilited, emacs 23 is not displaying what the error actually IS. Can you help?Oblast
see manual of flymake under emacs. What you need is to be on the line and: M-x flymake-display-err-menu-for-current-line . You can bind this to a key.Perforate
The best way is to use flymake-cursor. needing to hit keys or hover mice to see what the error is on an already fontified error line is rather silly. flymake-cursor echoes the error in the status bar. My current set up is working superbly:- richardriley.net/projects/emacs/dotprogramming#sec-1.5Oblast
I wrote a blog post covering this topic. Multi-checkers samples are given for different languages (python, php, javascript) goo.gl/xxkOYPerforate
@Perforate where would the shell script be placed? Would it be invoked every time a py file is opened?Corridor
@Corridor ensure that pycheckers binary is executable, and either specify full absolute path to it in emacs script or simpler, ensure that pycheckers is in one of the directories listed in your $PATH. It'll be invoked at each changes you do to the file. For more information check goo.gl/xxkOYPerforate
Did you mean pylint instead of epylint ?Shani
@Shani epylint is a wrapper around pylint for emacs flymake compatibility. It takes care that pylint is called with the correct options to stick to the standard output format and also try to be clever to run pylint in the correct location to avoid false positive upon some import cases. It's still bundled along pylint, and to have more insight on what it does, you could look inside the script itself or look at this copy on github: github.com/geordanr/pylint/blob/master/epylint.py .Perforate
O
7

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)
        ))
Oblast answered 25/10, 2009 at 17:31 Comment(2)
you might want to add (local-set-key [f4] 'flymake-display-err-menu-for-current-line) as wellRambler
Can I set different key-bindings than f2or f3Leucippus
R
0

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.

Ragwort answered 11/8, 2009 at 16:54 Comment(1)
I try use pep8.py. The same problem - I can't correct merge two configs. Work only one - pyflakes or pep8.py.Artisan
R
0

Windows batch version of vaab's pychechker

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1
Rambler answered 24/4, 2013 at 6:39 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.