Стабильность.emacs под flycheck

Чтобы заставить Flycheck работать на Python, я достиг удовлетворительного .emacs Оказалось, что требуется не более:

(require 'flycheck)
(add-hook 'after-init-hook #'global-flycheck-mode)

Теперь после небольшого ожидания того, на что будет похож Python 3.6, даже двухслойный

class Foo():
    pass

получает целый ряд предупреждений:

Too few public methods (0/2) [too-few-public-methods]
Class has no __init__ method [no-init]
Old-style class defined. [old-style-class]
Missing class docstring [missing-docstring]
Missing module docstring [missing-docstring]

несмотря на это я теперь твердо вернулся в 2.7 (sudo port select --set python python27).

Emacs помогает нам привыкнуть к контексту. Обычно не имеет значения, что находится в системе; человек получает такое же поведение, если он начинает с неизменного .emacs, Что еще могло измениться в моей системе, чтобы вызвать внезапное увеличение предупреждений о мухах?

2 ответа

Решение

ОК, я нашел ответ.

flycheck выбирает (молча?) flake8, и если он не найден, он возвращается к pylint (и впоследствии к pycompile).

Проблема заключалась в том, что символическая ссылка flake8 исчез. Вот почему / как.

После выбора python36 и обратно

~/ > sudo port select --set python python36
~/ > sudo port select --set python python27

и после выбора pip36 и обратно

~/ > sudo port select --set pip pip36
~/ > sudo port select --set pip pip27

символическая ссылка /opt/local/bin/flake8 исчезает. Осталось только flake8-2.7.

> ls -l /opt/local/bin/flake8*
lrwxr-xr-x  1 root  admin  70 20 Mar 16:35 /opt/local/bin/flake8-2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/flake8

Что происходит, по-видимому, это то, что flake8 указывает на ничто (port select обновляется, и символическая ссылка удаляется) при обновлении до Python 3.6, но не имеет flake8-36. Символическая ссылка не может быть восстановлена, когда вы переходите на Python 2.7 (один из них, возможно, первый, заслуживает предупреждения - возможно, как незначительная ошибка в MacPorts).

~/ > sudo port select --list flake8
Available versions for flake8:
    flake8-27
    none (active)

Решение состоит в том, чтобы явно указать flake8 в flake8-27 когда ты понижаешься

~/ > sudo port select --set flake8 flake8-27
Selecting 'flake8-27' for 'flake8' succeeded. 'flake8-27' is now active.

И ссылка возвращается и Flycheck выбирает flake8 над pylint,

> ls -l /opt/local/bin/flake8*
lrwxr-xr-x  1 root  admin  25  7 Sep 09:01 /opt/local/bin/flake8 -> /opt/local/bin/flake8-2.7
lrwxr-xr-x  1 root  admin  70 20 Mar 16:35 /opt/local/bin/flake8-2.7 -> /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/flake8

Может быть лучше настроить вспомогательный режим или только добавить в режим программирования

(add-hook 'prog-mode-hook 'flycheck-mode)

Установив его на global включит его в каждом буфере даже в текстовом режиме, например, в режиме org, который не нужен. Также может замедлить ход вещей.:)

Другие вопросы по тегам