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

StackOverflow https://stackoverflow.com/questions/1259873

Вопрос

Для проверки кода в режиме 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top