Как я могу использовать режим Emacs Flymake для Python с кодом проверки Pyflakes и Pylint?

Для проверки кода в режиме python я использую flymake с pyflakes

Также я хочу проверить стиль кода (pep8) с Pylint (описание на той же странице с Pyflakes)

Это решения работают. Но я не могу настроить flymake для работы с pyflakes и pylint вместе. Как мне это сделать?

4 ответа

Решение

Ну, 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)
        ))

Вы можете проверить скрипт на Лиспе здесь ( http://charlie137-2.blogspot.com/2009/08/check-python-coding-style-on-fly-with.html), который должен помочь в проверке PEP8 а ля pep8.py. Я не использую pyflakes или pylint, но я думаю, вы могли бы легко настроить это для работы с другими шашки.

Пакетная версия Windows vaab's pychechker

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1
Другие вопросы по тегам