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

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

Также я хочу проверить стиль кода (pep8) с помощью pylint (описание на той же странице с pyflakes)

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


person dixon    schedule 11.08.2009    source источник


Ответы (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)))
person vaab    schedule 08.09.2009
comment
Несмотря на то, что я вижу ошибки, emacs 23 не отображает, что это за ошибка на самом деле. Вы можете помочь? - person RichieHH; 22.10.2009
comment
см. руководство по flymake в emacs. Что вам нужно, так это быть на связи и: M-x flymake-display-err-menu-for-current-line. Вы можете привязать это к ключу. - person vaab; 24.10.2009
comment
Лучше всего использовать flymake-cursor. необходимость нажимать клавиши или навести курсор мыши, чтобы увидеть, какая ошибка находится в уже созданной строке ошибки, довольно глупо. flymake-cursor отображает ошибку в строке состояния. Моя текущая настройка работает превосходно: - richardriley.net/projects/emacs/dotprogramming#sec -1,5 - person RichieHH; 25.10.2009
comment
Я написал сообщение в блоге по этой теме. Примеры мульти-чекеров приведены для разных языков (python, php, javascript). goo.gl/xxkOY - person vaab; 20.09.2012
comment
@vaab, где будет размещен сценарий оболочки? Будет ли он вызываться каждый раз при открытии файла py? - person dustin; 18.04.2013
comment
@dustin убедитесь, что двоичный файл pycheckers является исполняемым, и укажите полный абсолютный путь к нему в сценарии emacs или, что проще, убедитесь, что pycheckers находится в одном из каталогов, перечисленных в вашем $PATH. Он будет вызываться при каждом изменении файла. Для получения дополнительной информации см. goo.gl/xxkOY. - person vaab; 18.04.2013
comment
Вы имели в виду pylint вместо epylint? - person EoghanM; 17.01.2015
comment
@EoghanM epylint - это оболочка вокруг pylint для совместимости с emacs flymake. Он позаботится о том, чтобы pylint был вызван с правильными параметрами, чтобы придерживаться стандартного формата вывода, а также попытаться проявить смекалку, чтобы запустить pylint в правильном месте, чтобы избежать ложных срабатываний в некоторых import случаях. Он по-прежнему связан с pylint, и чтобы лучше понять, что он делает, вы можете заглянуть внутрь самого скрипта или посмотреть эту копию на github: github.com/geordanr/pylint/blob/master/epylint.py. - person vaab; 19.01.2015

Обычно можно включить режим 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)
        ))
person RichieHH    schedule 25.10.2009
comment
вы можете также добавить (local-set-key [f4] 'flymake-display-err-menu-for-current-line) - person Bleeding Fingers; 16.04.2013
comment
Могу ли я установить другие привязки клавиш, кроме f2 или f3 - person alper; 03.12.2020

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

person Vince    schedule 11.08.2009
comment
Я пытаюсь использовать pep8.py. Та же проблема - не могу исправить слияние двух конфигов. Работа только одна - pyflakes или pep8.py. - person dixon; 12.08.2009

Пакетная версия vaab pychechker для Windows

@echo on
pylint %1
pep8 --ignore=E221,E701,E202 --repeat %1
pyflakes %1
person Bleeding Fingers    schedule 24.04.2013