Как я могу использовать режим Emacs Flymake для Python с кодом проверки pyflakes и pylint?
Вопрос
Для проверки кода в режиме Python я использую Flymake с хлопья
Также я хочу проверить стиль кода (pep8) с помощью pylint (описание на той же странице с pyflakes)
Эти решения работают.Но я не могу настроить Flymake для совместной работы с pyflakes и pylint.Как мне это сделать?
Решение
Ну, Flymake просто ищет исполняемую команду, которая выводит строки в предопределенном формате.Например, вы можете создать сценарий оболочки, который будет последовательно вызывать все нужные вам программы проверки...
Вы также должны убедиться, что ваш сценарий завершается возвратом уровня ошибки 0.Итак, это пример:
Вот что я сделал в скрипте «pycheckers»:
#!/bin/bash
epylint "$1" 2>/dev/null
pyflakes "$1"
pep8 --ignore=E221,E701,E202 --repeat "$1"
true
Для части 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)))
Другие советы
Обычно режим Flymake можно включить в хуке python-mode-hook.К сожалению, это вызывает проблемы с такими вещами, как py-execute-buffer, которые создают временные буферы, которые вызывают перехватчик, а затем вызывают сбой в режиме Flymake из-за отсутствия «настоящего файла».Решение состоит в том, чтобы изменить условия, в которых вы добавляете крючок: например, у меня:
(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)
))
Вы можете ознакомиться со сценарием Lisp здесь (http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html), что должно помочь с проверкой PEP8 в духе pep8.py.Я не использую pyflakes или pylint, но думаю, вы легко сможете настроить это для работы с другими программами проверки.
Пакетная версия vaab для Windows pychechker
@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1