Jak Mogę używać Emacs Flymake mode dla Pythona z pyflakes i pylint checking code?

Do sprawdzania kodu w trybie Pythona używam flymake z pyflakes

Również chcę sprawdzić styl kodu (pep8) z pylint (opis na tej samej stronie z pyflakes)

To rozwiązanie działa. Ale nie mogę skonfigurować flymake do pracy z pyflakes i pylint razem. Jak mogę to zrobić?

Author: Mirzhan Irkegulov, 2009-08-11

4 answers

Cóż, flymake szuka tylko wykonywalnego polecenia, które wyświetla linie wyjściowe w predefiniowanym formacie. Możesz na przykład utworzyć skrypt powłoki, który będzie wywoływał kolejno wszystkie Warcaby, które chcesz...

Musisz również upewnić się, że Twój skrypt zakończy się zwracając poziom błędu 0. Oto przykład:

Oto co zrobiłem w skrypcie "pycheckers":

#!/bin/bash

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

Dla części 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)))
 34
Author: vaab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-08 11:57:18

Zazwyczaj można włączyć tryb flymake w Python-mode-hook. Niestety powoduje to problemy z takimi rzeczami jak py-execute-buffer, które tworzą tymczasowe bufory, które wywołują hook, a następnie powodują czkawkę w trybie flymake z powodu braku "prawdziwego pliku". Rozwiązaniem jest modyfikacja warunków, w których dodajesz hook: - np. Mój to:

(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)
        ))
 7
Author: RichieHH,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-25 17:43:07

Możesz sprawdzić skrypt Lispu tutaj ( http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html ), które powinny pomóc w sprawdzeniu PEP8 a la pep8.py. nie używam pyflakes lub pylint, ale wyobrażam sobie, że można łatwo dostosować to do pracy z innymi warcabami.

 0
Author: Vince,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-11 16:54:28

Wsadowa wersja systemu vaab pychechker

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1
 0
Author: Bleeding Fingers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-24 06:39:12