python emacs pylint pep8 pyflakes

¿Cómo puedo usar el modo Emacs Flymake para python con pyflakes y el código de verificación de pylint?



pep8 (4)

Bueno, flymake solo está buscando un comando ejecutable que sea líneas de salida en un formato predefinido. Puede hacer un script de shell, por ejemplo, que llamará sucesivamente a todas las verificadoras que desee ...

También debe asegurarse de que su script termine devolviendo errorlevel 0. Así que este es un ejemplo:

Esto es lo que he hecho en un script "pycheckers":

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

Para la parte de emacs lisp:

(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)))

Para verificar el código en modo python, uso flymake con pyflakes

También quiero verificar el estilo de código (pep8) con pylint (descripción en la misma página con pyflakes)

Estas soluciones funcionan. Pero no puedo configurar flymake para trabajar con pyflakes y pylint juntos. ¿Cómo puedo hacerlo?



Por lo general, uno puede habilitar el modo flymake en el modo de enganche de python. Desafortunadamente, eso causa problemas con cosas como py-execute-buffer que crean búferes temporales que invocan el gancho y luego causan que el modo flymake tenga problemas debido a la falta de "archivo real". La solución es modificar las condiciones donde se agrega el gancho: por ejemplo, el mío es:

(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) ))


Versión por lotes de Windows del pychechker de pychechker

@echo on pylint %1 pep8 --ignore=E221,E701,E202 --repeat %1 pyflakes %1